我可以直接连接到 docker swarm 网络吗?

Joe*_*Joe 2 docker docker-swarm

我想要一个 Docker 服务/Swarm 网络内的 shell。具体来说,我希望能够连接到网络内部的数据库。

从管理器节点,我尝试了:

# docker network ls
NETWORK ID          NAME          DRIVER              SCOPE
481c20b4039a        bridge        bridge              local
2fhe9rtim9mz        my-network    overlay             swarm
Run Code Online (Sandbox Code Playgroud)

然后

docker run -it --network my-network alpine sh
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

docker:来自守护程序的错误响应:群范围网络(事件数据核心产品)与docker create或不兼容docker run。该网络只能由 docker 服务使用。

是否可以以某种方式启动可以连接到网络服务的交互式会话?

Mur*_*mel 5

从 Docker Engine v1.13开始(如johnharris85已经提到的 ),非服务容器可以--attachable创建网络时使用命令行参数附加到集群模式覆盖网络:

docker network create --driver overlay --attachable my-attachable-overlay-network
Run Code Online (Sandbox Code Playgroud)

关于您的后续问题:

有没有办法为现有网络更改此设置?

是的,也不是,就像我在另一个问题中已经描述的那样,您可以使用该docker service update功能:

要更新已运行的 docker 服务:

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

    docker network create --driver overlay --attachable my-attachable-overlay-network
    
    Run Code Online (Sandbox Code Playgroud)
  2. 删除禁用“可附加”覆盖网络的网络堆栈(在本例中称为my-non-attachable-overlay-network:):

    docker service update --network-rm my-non-attachable-overlay-network myservice
    
    Run Code Online (Sandbox Code Playgroud)
  3. 添加具有启用的“可连接”覆盖网络的网络堆栈:

    docker service update --network-add my-attachable-overlay-network myservice
    
    Run Code Online (Sandbox Code Playgroud)