为什么可以';我不能将容器连接到docker网络吗?

为什么可以';我不能将容器连接到docker网络吗?,docker,docker-swarm,docker-networking,Docker,Docker Swarm,Docker Networking,我已经创建了一个用户定义的可附加覆盖swarm网络。我可以检查它,但当我尝试将容器附加到它时,在manager节点上运行时会出现以下错误: $ docker network connect mrunner baz Error response from daemon: network mrunner not found 网络已定义且可连接 $ docker network inspect mrunner [ { "Name": "mrunner", "

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

$ 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
为什么网络连接失败

**答案如下:

参见:

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

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

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

因此,默认情况下,独立容器不能使用覆盖网络,如果坚持,您需要添加
--attachable
,以允许独立容器使用此网络。

多亏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(以及它们连接到的其他覆盖网络)


我就是这么做的,docker network inspect证实了这一点