为什么我不能将容器连接到Docker网络?

时间:2019-06-20 21:39:00

标签: docker docker-swarm docker-networking

我创建了一个用户定义的可连接覆盖群网络。我可以检查它,但是当我尝试将容器附加到它时,在管理器节点上运行时会出现以下错误:

$ docker network connect mrunner baz 
Error response from daemon: network mrunner not found

网络已定义且可连接

$ docker network inspect mrunner
[
    {
        "Name": "mrunner",
        "Id": "kviwxfejsuyc9476eznb7a8yw",
        "Created": "2019-06-20T21:25:45.271304082Z",
        "Scope": "swarm",
        "Driver": "overlay",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "10.0.1.0/24",
                    "Gateway": "10.0.1.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": null,
        "Options": {
            "com.docker.network.driver.overlay.vxlanid_list": "4098"
        },
        "Labels": null
    }
]


$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
4a454d677dea        bridge              bridge              local
95383b47ee94        docker_gwbridge     bridge              local
249684755b51        host                host                local
zgx0nppx33vj        ingress             overlay             swarm
kviwxfejsuyc        mrunner             overlay             swarm
a30a12f8d7cc        none                null                local
uftxcaoz9rzg        taskman_default     overlay             swarm

为什么该网络连接失败?

**这是在这里回答的:https://github.com/moby/moby/issues/39391

2 个答案:

答案 0 :(得分:0)

请参见this

要创建用于群服务的覆盖网络,请使用以下命令:

$ docker network create -d overlay my-overlay

要创建覆盖网络,群集服务或独立容器可使用该覆盖网络与在其他Docker守护程序上运行的其他独立容器进行通信,请添加--attachable标志:

$ docker network create -d overlay --attachable my-attachable-overlay

因此,默认情况下,独立容器无法使用叠加网络,如果需要,则需要添加--attachable才能使独立容器使用该网络。

答案 1 :(得分:0)

感谢docker git repo上的thaJeztah

解决方案如下,但从本质上讲,以流服务为中心:

docker network create -d overlay --attachable --scope=swarm somenetwork

docker service create --name someservice nginx:alpine

如果要在创建服务后将其连接到somenetwork,请更新服务;

docker service update --network-add somenetwork someservice

此后; someservice服务的所有任务都将连接到somenetwork(除了它们所连接的其他覆盖网络之外)。

https://github.com/moby/moby/issues/39391#issuecomment-505050610