为什么我不能将容器附加到 docker 网络?

Why can't i attach a container to a docker network?

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

$ 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

this:

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

$ docker network create -d overlay my-overlay

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

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

所以,overlay网络默认不能被standalone容器使用,如果坚持,你需要添加--attachable让这个网络被standalone容器使用。

感谢 thaJeztah 在 docker git 回购:

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

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