从Docker容器连接到远程MySQL数据库

我在AWS中有两台服务器,都在一个安全组中,允许安全组成员之间的所有端口上的所有stream量。 在一台服务器上,我有一个MySQL服务器(没有docker,让我们把这个服务器称为“MySQL服务器”),在另一台服务器上我有docker(我们称之为“Docker服务器”)。 我想从Docker服务器的容器中访问MySQL,而不必通过Internet路由stream量(我想使用MySQL服务器的内部IP地址)。

这可能吗? 我有什么select?

到目前为止,我已经尝试过

我configuration了MySQL服务器来侦听所有的接口,只是为了testing。 这允许我从Docker服务器(使用mysql客户端连接到MySQL服务器的私有IP地址)成功连接到MySQL服务器。 但是,当我启动一个容器时,一个新的networking命名空间被创build,所以我不能再访问MySQL服务器的私有IP地址。

我已经尝试使用这里描述的大使容器,但我遇到了同样的问题,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为容器创build一个新的专用networking,但是我不知道要怎样才能解决我想要做的事情。

我怎么能连线的东西,以便能够访问一个容器内的MySQL服务器?

是的,这是可能的。

一个集装箱是否可以与世界交stream受两个因素的制约。 第一个因素是主机是否转发其IP数据包。 其次是主机的iptables是否允许这个特定的连接。

  1. 要检查内核上的设置或手动打开它( 确保设置为1

     $ sysctl net.ipv4.conf.all.forwarding net.ipv4.conf.all.forwarding = 0 $ sysctl net.ipv4.conf.all.forwarding=1 $ sysctl net.ipv4.conf.all.forwarding net.ipv4.conf.all.forwarding = 1 
  2. 如果您在守护进程启动时设置了--iptables=false ,Docker将永远不会更改您的系统iptables规则。 否则,Docker服务器会将转发规则附加到DOCKERfilter链。 所以, 一定不要使用--iptables=false