连接到外部MYSQL docker容器

时间:2017-07-25 03:27:52

标签: mysql docker virtual-machine external

我有两个VM在运行,一个(A)在docker网络中有MYSQL数据库。 另一个(B)VM有我的前端应用程序docker容器。

我运行我的MYSQL docker容器(A)如下:

docker run --name db --net=netname -v /path/to/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password  -d mysql:5.6.32

docker exec -i db mysql -pyourpassword -e 'CREATE DATABASE mydb'

将MYSQL my.cnf文件编辑为bind-address = 0.0.0.0后 我尝试使用带有ip addr show eth0命令的MYSQL docker容器给我的ip地址从VM(B)连接。

是:

 eth0@if46: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.2/16 scope global eth0
   valid_lft forever preferred_lft forever

主机:172.18.0.2端口:3306

我收到的回复:

OperationalError: (2003, "Can't connect to MySQL server on '172.18.0.2' ([Errno 110] Connection timed out)")

我也尝试过VM(A)IP地址,但响应变为connection refused

我确信我错过了一些东西 - 或许多东西 - 我很开心。我如何从服务器(B)成功连接到(A)我的MYSQL容器? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您也可以将mysql端口映射到主机。

docker run -p 3306:3306 --name db --net=netname -v /path/to/mysql/:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=password  -d mysql:5.6.32

然后你可以使用主机ip或名称访问mysql。

如果您尝试通过IP地址直接访问容器..在大多数情况下,这意味着您做错了。假设每次启动容器时分配的ip都不同。

答案 1 :(得分:0)

如果要连接两个容器,则必须位于同一网络中。通过这种方式,您可以通过其网络别名访问容器。例如,运行以下命令:

docker network create my-network
docker run --name db --net=my-network --network-alias=db -v /path/to/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password  -d mysql:5.6.32
docker run -it --name ping --net=my-network --network-alias=ping debian:strech /bin/bash

ping容器内部可以运行ping -c2 db

如果您想让多个容器协同工作,可以查看docker-compose