"network not manually attachable" when 运行 针对 docker 群网络的一次性命令

"network not manually attachable" when running one-off command against docker swarm network

我正在尝试 运行 一个一次性命令来初始化一个新的 docker swarm 中的数据库模式,该 swarm 部署了 1.13 对 docker- 的新支持撰写文件。

群有以下网络:

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
...
b7dptlu8zyqa        vme_internal         overlay             swarm
...

docker-compose.yml 文件中定义为:

networks:
    internal:

我运行的命令是

docker run --rm --network vme_internal app:0.1 db upgrade

额外的 vme_ 前缀来自我在部署时给堆栈的名称。现在当我 运行 上述命令时,我得到:

docker: Error response from daemon: Could not attach to network vme_internal:
rpc error: code = 7 desc = network vme_internal not manually attachable.

如何使网络可连接?

我在 Docker networking 中找不到任何关于可附加的具体信息,并尝试将属性 attachable 添加到网络定义但没有成功。

默认情况下,使用新的 swarm 模式创建的覆盖网络不能用于非 运行 来自 swarm 的容器。 1.13 版允许您切换此设置,因此请确保您已升级。您必须使用可附加标志创建网络。我也无法让它在 swarm worker 上工作,需要将节点提升为 swarm manager。

使用作曲家

因为作曲家 v3.2 it is possible to configure the attachable property through the composer file using the keyword attachable 喜欢:

networks:
  mynet1:
    driver: overlay
    attachable: true

使用docker network create

自 Docker 引擎 API v1.25 以来,可以使用 --attachable 参数创建网络并使其可连接,例如:

docker network create --driver overlay --attachable my-overlay-network

要更新已经 运行 docker 的服务:

  1. 创建可连接的覆盖网络:

    docker network create --driver overlay --attachable my-attachable-overlay-network
    
  2. 删除禁用了 "attachable" 覆盖网络的网络堆栈(在本例中称为:my-non-attachable-overlay-network):

    docker service update --network-rm my-non-attachable-overlay-network myservice
    
  3. 添加启用了 "attachable" 覆盖网络的网络堆栈:

    docker service update --network-add my-attachable-overlay-network myservice