【问题标题】:Connect to External MYSQL docker container连接到外部 MYSQL docker 容器
【发布时间】:2017-07-25 03:27:51
【问题描述】:

我有两台 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'

将MYSQLmy.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 网络文档?
  • @aDeveloper 你如何运行每个容器?您是使用docker run 还是使用docker-compose 运行它们?你在读什么文档?请添加更多信息。

标签: mysql docker virtual-machine external


【解决方案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 都不同。

【讨论】:

  • 非常感谢,我想我想多了,而且我遗漏了一些非常明显的东西。感谢您,我能够将应用程序与数据库连接起来。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-01-05
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2019-08-04
    • 2021-04-25
    • 2015-01-21
    • 1970-01-01
    相关资源
    最近更新 更多