【发布时间】:2018-11-05 20:59:18
【问题描述】:
我有两台机器。我的机器使用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
【问题讨论】:
-
我还不清楚这里的问题是什么?有两件事
I have to set it to bind to 0.0.0.0 inside this container.默认情况下,容器内的 mysql 绑定仅是0.0.0.0。接下来,当您在 docker 中使用-p 3306:3306时,它本身就是与主机上的0.0.0.0的绑定。这意味着3306暴露在主机上。现在你能澄清一下你想要解决的问题是什么吗? -
好的。我不知道默认情况下容器 mysql 中绑定到 0.0.0.0 的那部分谢谢你提供的信息。那时我不必再试一次,因为它没有用。我用过数字海洋水滴。但似乎我仍然无法访问它。不知何故,我无法从 IP1 连接。我检查了一下,数据库在 mysql 容器内。我也可以用 root 密码连接到 mysql shell 。唯一剩下的就是防火墙了。
-
是的,有两个防火墙规则,机器级别和云提供商级别。两者都需要启用 3306 才能正常工作
-
使用相同的防火墙设置和 docker-compose 我终于成功连接。由于某种原因,仅使用 docker 不起作用。似乎新的 docker 有一些我不明白的新东西。没有使用“docker run”命令创建服务,容器无法相互连接。我无法解决这个问题。但好在 docker-compose 马上就起作用了。我用“docker run”解决了这个问题两天,我很高兴我摆脱了它。似乎使用 docker 17.06 有一些 'docker swarm init' 和许多额外的东西如何连接容器
-
@makkasi,你能发布你如何尝试连接到 mysql 容器以及你得到的响应吗?
标签: mysql docker remote-access ports