如何连接到远程机器上的Docker MySQL容器

15 浏览
0 Comments

如何连接到远程机器上的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

0