从 Docker Swarm 中其他节点上的服务访问容器

Access container from service on other node in Docker Swarm

我 Docker 运行 处于集群模式,并创建了一个运行一个容器的服务。服务 my-servicenode1(管理器节点)上运行,容器 my-containernode2

上生成

node1 开始,我如何在 my-container 运行 和 node2 上制作 docker exec

我找到了这个项目,skopos-plugin-swarm-exec,解决了我的问题。

可以这样使用:

docker run -v /var/run/docker.sock:/var/run/docker.sock datagridsys/skopos-plugin-swarm-exec task-exec --image <task id> <command>

工作原理(内部)
从任务 ID 和要执行的命令开始,执行的步骤如下:

  • 获取目标任务所在的节点ID运行,以及该节点上任务的容器ID
  • 创建临时服务,使用相同的容器镜像,以及将临时服务的任务放置在目标任务所在的同一节点上的调度约束
  • 使用节点本地 Docker 引擎执行 docker exec 命令的等价物 API
  • 命令完成后,终止临时服务,传播已执行命令的退出代码
  • 临时服务终止后,提取退出代码并return它