【问题标题】:Cannot ping container in another host with docker consul无法使用 docker consul ping 另一台主机中的容器
【发布时间】:2017-05-17 13:00:20
【问题描述】:

我有 3 台 CentoS 7 机器。 我试图建立一个 cassandra 集群。 如果 cassandra 节点位于同一网络中,则它们可以发现所有其他节点,因此我一直在寻找一种方法来在不同主机上设置 2 个容器,但仍使它们像在同一网络中一样工作。

我尝试通过以下步骤使用 consul 进行操作:

  1. 在 machine0 上创建一个 consul 容器:

    docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

  2. 在machine1和machine2中将consul配置添加到/lib/systemd/system/docker.service

    -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://*machine0-external-ip*:8500/network --cluster-advertise=machine0-external-ip:2375 --userland-proxy=false \

  3. 创建覆盖网络docker network create -d overlay --subnet=10.10.10.0/24 testNetwork

  4. 使用我的测试网络 machine1- docker run -itd --name container1 --net testNetwork busybox machine2- docker run -itd --name container2 --net testNetwork busybox 在 machine1 和 machine2 上创建 busybox 容器

  5. 从任何一台机器(1 或 2)我都可以通过这个命令看到网络中的容器 docker network inspect testNetwork 结果:

    {
    "Name": "testNetwork",
    "Id": "12020d9c66762dcf4db74cb44ffed2fe8f9e3eb531fe5e4e3f16640185154447",
    "Scope": "global",
    "Driver": "overlay",
    "EnableIPv6": false,
    "IPAM": {
        "Driver": "default",
        "Options": {},
        "Config": [
            {
                "Subnet": "10.10.10.0/24"
            }
        ]
    },
    "Internal": false,
    "Containers": {
        "c704cdedf845507891ea25ece4536e35a8984ffc98850d44fd6520e1954a203a": {
            "Name": "container1",
            "EndpointID": "345a3895f6480eecaa3e03f83ff021197a3241ebedca5cb635c06f8a83d259d6",
            "MacAddress": "02:42:0a:0a:0a:02",
            "IPv4Address": "10.10.10.2/24",
            "IPv6Address": ""
        },
        "ep-c507d3c94db20b519da28319bcb07e63297d2f2c12c0fdd52e88807bbb255743": {
            "Name": "container2",
            "EndpointID": "c507d3c94db20b519da28319bcb07e63297d2f2c12c0fdd52e88807bbb255743",
            "MacAddress": "02:42:0a:0a:0a:03",
            "IPv4Address": "10.10.10.3/24",
            "IPv6Address": ""
        }
    },
    "Options": {},
    "Labels": {}
    

    }

  6. 尝试从 container1 docker exec container1 ping -w 3 container2 内部 ping container2。这导致

    PING container2 (10.10.10.3): 56 data bytes
    
    --- container2 ping statistics --- 3 packets transmitted, 0 packets 
    received, 100% packet loss
    

您可以看到 ping 将发送到我想要的子网地址 (10.10.10.3)。

我做错了什么?

据我了解,容器应该通过自动创建的网络docker_gwbridge。为了知道这个子网在哪里是真实的(它在另一台机器上),我对数据包运行了嗅探器,看起来容器只是在他的内部网络中查找该地址,甚至没有通过 @ 987654332@...

如果有人对我的问题有不同的方法或建议,我很想听听!

提前致谢!

【问题讨论】:

    标签: networking docker consul


    【解决方案1】:

    我不明白你想在这里用 consul 实现什么,因为你显然没有在你的方法中使用它。您可以查看我在以下帖子中的答案以更清楚地了解它:

    Does my docker images need its own consul client instances?

    希望它能提供一些清晰的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多