从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 )
$ 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
-
如果您在守护进程启动时设置了
--iptables=false
,Docker将永远不会更改您的系统iptables
规则。 否则,Docker服务器会将转发规则附加到DOCKERfilter链。 所以, 一定不要使用--iptables=false