我有两台机器。我的一台机器使用IP1(欧洲)
,另一台机器使用公共IP2(美国)
。在IP2
上,我运行了一个mysql容器,并将卷/var/lib/mysql
设置为在主机机器上的某个文件夹~/mysqldatabase
中进行复制。端口3306
的防火墙规则已添加。此外,我还可以通过ssh连接到该机器。所以我不确定从哪里开始。通常情况下,如果没有docker,我只需添加
bind-address = 0.0.0.0
在mysql中进行配置并打开防火墙端口3306
(或指向mysql的其他端口)即可正常工作。因此,我可以在IP2机器上安装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服务
[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.在IP2机器上安装mysql-client、mysql-server或mysql
- 2.也没有在任何地方设置绑定到0.0.0.0,因为我想直接连接到mysql容器。可能我要在这个容器内部将其设置为绑定到0.0.0.0。
防火墙的结果
sudo netstat -tunlp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 24717/docker-proxy
我必须将其设置为在此容器内绑定到0.0.0.0。
默认情况下,在容器内mysql绑定仅为0.0.0.0
。接下来,当您在docker中使用-p 3306:3306
时,它本身就是绑定到主机上的0.0.0.0
。这意味着3306也在主机上暴露出来了。现在,请您澄清一下您想要解决的具体问题是什么? - Tarun Lalwani