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

前端之家收集整理的这篇文章主要介绍了网络-从Docker容器连接到远程MySQL数据库 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我在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服务器?

最佳答案
是的,那是可能的.

容器是否可以与世界对话取决于两个因素.第一个因素是主机是否正在转发其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服务器将转发规则附加到DOCKER过滤器链.因此,请确保不要使用–iptables = false

猜你在找的Docker相关文章