针对 docker swarm 网络运行一次性命令时出现“网络无法手动连接”

问题描述 投票:0回答:2

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

集群具有以下网络:

$ 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 Network 中找不到有关可附加的任何具体信息,并尝试向网络定义添加属性

attachable
,但没有成功。

docker docker-compose docker-swarm
2个回答
72
投票

使用撰写

自 compose v3.2 起,可以使用关键字

attachable
通过 compose 文件配置可附加属性,如下所示:

networks:
  mynet1:
    driver: overlay
    attachable: true

使用

docker network create

自 Docker Engine 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. 删除禁用“可附加”覆盖网络的网络堆栈(在本例中称为:

    my-non-attachable-overlay-network
    ):

     docker service update --network-rm my-non-attachable-overlay-network myservice
    
  3. 添加具有启用的“可附加”覆盖网络的网络堆栈:

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

6
投票

默认情况下,使用新 Swarm 模式创建的覆盖网络不能与不是从 Swarm 运行的容器一起使用。版本 1.13 允许您切换此设置,因此请确保您已升级。您必须使用可附加标志创建网络。我也无法让它在 Swarm Worker 上工作,该节点需要升级为 Swarm Manager。

© www.soinside.com 2019 - 2024. All rights reserved.