【问题标题】:Docker Swarm network overlay issueDocker Swarm 网络覆盖问题
【发布时间】:2021-08-07 14:53:28
【问题描述】:

我在 Proxmox VE 7 中为 docker swarm 创建了 3 个 ubuntu 20.04 VM。我尝试关注https://documentation.portainer.io/v2.0/deploy/ceinstallswarm/ 网站在我的 Swarm 上设置 Portainer。但是我无法浏览任何 ubuntu 虚拟机的 IP 地址来访问 Portainer 站点来设置 docker 容器。

我的 Swarm 上的覆盖网络出现问题。看起来入口没有启用。请参阅下面的网络检查 portainer_agent_network。

我发现所有的swarm机器都没有监听4789端口。当我运行命令sudo lsof -i:4789时,它什么也没显示。

有人帮我解决问题吗?我的 docker swarm 出了什么问题?

ubuntu@swarm01:~$ docker network inspect portainer_agent_network 
[
    {
        "Name": "portainer_agent_network",
        "Id": "tzm9sx2zifgaxhpmrd8xk7gti",
        "Created": "2021-08-07T14:24:33.835202371Z",
        "Scope": "swarm",
        "Driver": "overlay",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "10.0.11.0/24",
                    "Gateway": "10.0.11.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "54a9491638f699fc6441961b04b91c8ca923bd8e4980dbe36651fa2618cdbe2c": {
                "Name": "portainer_portainer.1.fd5m3wvccnxrl43iwst2imwti",
                "EndpointID": "4537774ec3c146843b48ab89707df7b04a6a76880af85dbe025fcc4d7422262c",
                "MacAddress": "02:42:0a:00:0b:0c",
                "IPv4Address": "10.0.11.12/24",
                "IPv6Address": ""
            },
            "83044215d796b649ee8fc78be2d1364c80646448db3a933ee9a48ff0b0b7fe24": {
                "Name": "portainer_agent.idso1hec0iqiyvm1jhu1iaoq1.qidcsempp75po4znf1c7pj09r",
                "EndpointID": "dfdd91e83969150ea70674b9ea998690b47a6abf113c9a644315d641c6b68e1c",
                "MacAddress": "02:42:0a:00:0b:05",
                "IPv4Address": "10.0.11.5/24",
                "IPv6Address": ""
            },
            "lb-portainer_agent_network": {
                "Name": "portainer_agent_network-endpoint",
                "EndpointID": "be0b5a8bdda9ccae975314fad1424d96e3c57763b1c145f4a67e286f54300195",
                "MacAddress": "02:42:0a:00:0b:08",
                "IPv4Address": "10.0.11.8/24",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.driver.overlay.vxlanid_list": "4107"
        },
        "Labels": {
            "com.docker.stack.namespace": "portainer"
        },
        "Peers": [
            {
                "Name": "0589007b93f4",
                "IP": "10.0.0.241"
            },
            {
                "Name": "be83a3dd8fbd",
                "IP": "10.0.0.242"
            },
            {
                "Name": "f937ea4c2dbf",
                "IP": "10.0.0.243"
            }
        ]
    }
]

ubuntu@swarm01:~$ sudo lsof -i:7946
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dockerd 451 root   30u  IPv6  14558      0t0  TCP *:7946 (LISTEN)
dockerd 451 root   32u  IPv6  14559      0t0  UDP *:7946 
ubuntu@swarm01:~$ sudo lsof -i:4789
ubuntu@swarm01:~$

致以最诚挚的问候,

帕特里克·李

【问题讨论】:

    标签: networking overlay docker-swarm portainer


    【解决方案1】:

    覆盖网络是一个虚拟网络,节点用来在内部相互通信。

    如果您希望 swarm 外部的任何流量(包括来自同一 VM 的 curl)到达您的搬运工容器,那么您需要公开该端口。

    使用 Docker CLI:https://docs.docker.com/engine/reference/commandline/service_create/#publish-service-ports-externally-to-the-swarm--p---publish

    或 Docker 撰写:https://docs.docker.com/compose/compose-file/compose-file-v3/#ports

    注意:您希望将这些容器公开为服务,而不是单个容器。

    【讨论】: