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

Can I connect directly to a docker swarm network?

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

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

# docker network ls
NETWORK ID          NAME          DRIVER              SCOPE
481c20b4039a        bridge        bridge              local
2fhe9rtim9mz        my-network    overlay             swarm

然后

docker run -it --network my-network alpine sh

但我收到错误消息:

docker: Error response from daemon: swarm-scoped network (event-data-core-prod) is not compatible with docker create or docker run. This network can only be used by a docker service.

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

因为 Docker 引擎 v1.13 (like already mentioned by ) it is 非服务容器可以在创建网络时使用 --attachable 命令行参数连接到群模式覆盖网络:

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

关于你的后续问题:

Is there a way to change this for an extant network?

是也不是,正如我在 中所述,您可以使用 docker service update 功能:

要更新已经 运行 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