连接到外部MYSQL泊坞窗容器

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

我运行我的MYSQL泊坞窗容器(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

我确定我错过了一些东西 – 或者很多东西 – 我是开放的。 我将如何成功地连接到(A)我的MYSQL容器从服务器(B)? 先谢谢你。

你也可以把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都是不同的。

如果你想连接两个容器,他们必须在同一个网络中。 通过这种方式,您可以通过网络别名访问容器。 例如,运行以下命令:

 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