什么可能会阻止从Docker容器到外部服务器的连接

时间:2019-06-25 18:33:39

标签: docker

我有一个计划从Docker连接的外部服务器abc.internalcorp.com。

我试图从主机对服务器进行ping操作,

ping abc.internalcorp.com
PING abc.internalcorp.com (172.xx.xx.xx) 56(84) bytes of data.
64 bytes from abc.internalcorp.com (172.xx.xx.xx): icmp_seq=1 ttl=47 time=32.6 ms
^C
--- abc.internalcorp.com ping statistics ---
2 packets transmitted, 1 received, 50% packet loss, time 999ms
rtt min/avg/max/mdev = 32.673/32.673/32.673/0.000 ms

但是当我从Docker容器执行相同的命令时,没有看到任何响应。怎么可能呢?

docker exec -ti docker-container bash
root@b7bdf44feb7f:/# ping abc.internalcorp.com
PING abc.internalcorp.com (172.xx.xx.xx) 56(84) bytes of data.
<No response>

此ping只是一个测试。 abc.internalcorp.com实际上是数据库服务器,我无法连接到它。我可以连接到其他数据库服务器。

更新: 我在〜/ .docker / daemon.json

中更改了bip
{
  "bip": "193.168.1.5/24",
  "registry-mirrors": [],
  "insecure-registries": [],
  "debug": true,
  "experimental": false
}

但是我仍然遇到相同的ping问题

docker exec -ti docker-container bash
root@b7bdf44feb7f:/# ip addr show eth0
10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:c1:a8:01:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 193.168.1.1/24 brd 193.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever

修改 找出问题。我的docker中还有其他网络具有相同的网络子网。删除它们并可以正常工作

3 个答案:

答案 0 :(得分:1)

需要做两件事。

  1. 通过编辑daemon.json更改网络

    {   “注册表镜像”:[],   “不安全的注册表”:[],   “调试”:是的,   “实验性”:错误,   “ bip”:“ 12.12.0.1/24” }

  2. 删除docker中可能与ip冲突的其他网络。您可以使用

    检查是否有其他网络在相同范围内

    docker检查'networkname'

答案 1 :(得分:0)

范围172.x.x.x是docker内部网络上的默认范围,如果您在本地网络中使用相同范围,则需要为docker网络指定其他范围。

https://docs.docker.com/v17.09/engine/userguide/networking/default_network/custom-docker0/

答案 2 :(得分:0)

使用解析abc.internalcorp.com查找DNS。通过如下更新daemon.json将其作为DNS添加到您的docker容器中。如果x.x.x.x是DNS。

{
    "dns": ["x.x.x.x"]
}

重新启动Docker守护程序。然后尝试从容器ping。