我有两台机器。我的机器 IP1(Europe)
,以及其他具有公共 IP2(USA)
. 在 IP2
我有一个mysql容器正在运行 /var/lib/mysql
设置为在主机上的某个文件夹中复制 ~/mysqldatabase
. 端口的防火墙规则 3306
已添加。我也有ssh连接到机器。所以我不知道从哪里开始。通常在没有 Docker 的情况下,我只添加
bind-address = 0.0.0.0
作为mysql中的配置,我打开了防火墙端口 3306
(或者指向mysql的另一个)这些东西就可以工作了。所以我可能可以在ip2机器上的docker外部安装mysql server包(主机是ubuntu16.04),并将其设置为指向 ~/mysqldatabase
文件夹,但真的有必要这么做吗?有没有办法直接从 IP1
至 IP2:mysql_container:mysql_database
我以两种方式运行mysql docker容器。一个是docker文件。另一个是systemctl服务。
docker-compose.yml的一部分:
version: "3"
services:
mysql:
image: mysql:5.7
volumes:
- /home/username/mysqldatabase:/var/lib/mysql
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: somedb
MYSQL_USER: someuser
MYSQL_PASSWORD: someuserpassword
mysql.service服务
[Unit]
Description=Run %p
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm -f %p
docker run --rm --name mysql -v /home/username/mysqldatabase:/var/lib/mysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=rootpass -e MYSQL_DATABASE=somedb -e MYSQL_USER=someuser -e MYSQL_PASSWORD=someuserpassword \
mysql:5.7
ExecStop=/usr/bin/docker stop %p
[Install]
WantedBy=multi-user.target
为了使事情更简单,让我们说,我只使用第二种方法。
我没有:
1.mysql-client、mysql server或ip2机器上的mysql
2.我没有设置绑定到0.0.0.0的位置,因为我想直接连接到mysql容器。可能我必须将它设置为绑定到这个容器中的0.0.0.0。
防火墙的结果
sudo netstat -tunlp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 24717/docker-proxy
2条答案
按热度按时间8dtrkrch1#
您没有指定如何运行mysql容器。。。
您需要指定哪个端口应该“published”,即哪个端口应该从mysql容器的“outside”到“inside”。
为此,您可以指定
-p
当你这么做的时候docker run
或将其添加到docker-compose.yml
.或者
docker-compose.yml
```version: '3.1'
services:
db:
image: mysql
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: example
dldeef672#
我认为您的mysql容器正在侦听ipv6(查看netstat结果)。原因可能是你的docker配置。我不知道如何解决它,我个人只是关闭我的docker主机上的ipv6以避免这个问题。
希望有帮助。