如何连接到远程机器上的Docker MySQL容器
如何连接到远程机器上的Docker MySQL容器
我有两台机器。我的机器使用IP1(欧洲)
,另一台机器使用公共IP2(美国)
。在IP2
上,我运行了一个带有/var/lib/mysql
卷的mysql容器,并设置将其复制到主机机器上的某个文件夹~/mysqldatabase
。已添加防火墙规则以开放端口3306
。我还可以通过ssh连接到该机器。所以我不确定从哪里开始。通常情况下,如果没有docker,我只需将以下配置添加到mysql中:
bind-address = 0.0.0.0
并打开防火墙端口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.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.在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