【发布时间】:2016-07-27 15:28:48
【问题描述】:
我在 AWS 中有两台服务器,都在一个安全组中,允许安全组成员之间的所有端口上的所有流量。在一台服务器上,我有一个 MySQL 服务器(没有 docker,我们称此服务器为“MySQL 服务器”),在另一台服务器上我有 docker(我们称其为“Docker 服务器”)。我想从 docker 服务器上的容器内访问 MySQL,而不必通过 Internet 路由流量(我想改用 MySQL 服务器的内部 IP 地址)。
这可能吗?我有哪些选择?
到目前为止我已经尝试过什么
我已将 MySQL 服务器配置为侦听所有接口,仅用于测试。这允许我从 Docker 服务器成功连接到 MySQL 服务器(使用 mysql 客户端连接到 MySQL 服务器的私有 IP 地址)。但是,当我启动一个容器时,会创建一个新的网络命名空间,因此我无法再访问 MySQL 服务器的私有 IP 地址。
我已尝试使用 here 中描述的大使容器,但我遇到了同样的问题,无法从大使容器内获得 MySQL 服务器的私有 IP 地址。
示例
这里有一个例子来说明问题和我正在尝试做的事情。
来自 Docker 服务器(尚未在任何容器中):
$ ping -c 1 10.0.0.155
PING 10.0.0.155 (10.0.0.155) 56(84) bytes of data.
64 bytes from 10.0.0.155: icmp_seq=1 ttl=64 time=0.777 ms
--- 10.0.0.155 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.777/0.777/0.777/0.000 ms
但是在容器内尝试:
$ sudo docker run --rm -it apcera/nats-ping-client ping -c 1 10.0.0.115
PING 10.0.0.115 (10.0.0.115) 56(84) bytes of data.
From 10.0.0.200 icmp_seq=1 Destination Host Unreachable
--- 10.0.0.115 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
我期待这是因为我知道 docker 为容器创建了一个新的专用网络,但我知道的不够多,无法绕过我正在尝试做的事情。
我如何连接东西以便能够从容器内访问 mysql 服务器?
【问题讨论】:
-
看起来您没有从容器中暴露任何端口?你解决了吗?顺便说一句,ping 使用端口 7,所以即使这对你有用,我怀疑它会解决你的实际问题,因为 mysql 将使用不同的端口。
-
不,原来的问题还没有解决。最后,我决定在 docker 容器中使用 mysql 服务器的公共 IP 地址。我更新了 AWS 安全组以限制只能从 docker 服务器访问 mysql 端口,这是有效的。但这不是我最初想要的,我想通过专用网络路由 mysql 流量,而不是通过互联网。
标签: networking docker