连接到外部 MYSQL docker 容器
Connect to External MYSQL docker container
我有两个 VM 运行ning,一个 (A) 在 docker 网络中有 MYSQL 数据库。
另一个 (B) VM 有我的前端应用程序 docker 容器。
我运行我的MYSQLdocker容器(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
后
我尝试使用 MYSQL docker 容器通过 ip addr show eth0
命令给我的 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 容器?
提前谢谢你。
如果你想连接两个容器,它们必须在同一个网络中。通过这种方式,您可以通过网络别名访问容器。例如 运行 以下命令:
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
您不妨将 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 都不同。
我有两个 VM 运行ning,一个 (A) 在 docker 网络中有 MYSQL 数据库。 另一个 (B) VM 有我的前端应用程序 docker 容器。
我运行我的MYSQLdocker容器(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
后
我尝试使用 MYSQL docker 容器通过 ip addr show eth0
命令给我的 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 容器? 提前谢谢你。
如果你想连接两个容器,它们必须在同一个网络中。通过这种方式,您可以通过网络别名访问容器。例如 运行 以下命令:
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
您不妨将 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 都不同。