gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:42:40 27 4
gpt4 key购买 nike

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

这可能吗?我有哪些选择?

到目前为止我尝试过的

我已将 MySQL 服务器配置为监听所有接口(interface),仅用于测试。这允许我从 Docker 服务器成功连接到 MySQL 服务器(使用 mysql 客户端连接到 MySQL 服务器的私有(private) IP 地址)。但是,当我启动一个容器时,会创建一个新的网络命名空间,因此我无法再访问 MySQL 服务器的私有(private) IP 地址。

我尝试过使用大使容器,如 here 所述。但我遇到了同样的问题,MySQL 服务器的私有(private) 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
  • Docker 永远不会更改您的系统 iptables规则,如果你设置 --iptables=false当守护进程启动时。否则 Docker 服务器会将转发规则附加到 DOCKER 过滤器链中。所以,一定不要使用--iptables=false
  • 关于networking - 从 Docker 容器连接到远程 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38617322/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com