【发布时间】:2021-10-10 03:09:20
【问题描述】:
注意:我已经尝试以任何我能想到的方式搜索现有答案,但我不相信那里有任何关于如何实现我所追求的信息的信息
上下文
我有一个现有的 swarm 跨多个主机运行一堆网络服务。部署通过docker-compose build && docker stack deploy 完成。一些服务包含此堆栈所针对的主要服务的功能所必需的重要状态,包括通过 CLI 与其交互时。
目标
我如何在我的 swarm 上运行的现有堆栈中创建一个临时容器,以对我的主要服务进行交互式诊断和故障排除?该服务有一个 CLI 接口,但它需要访问其他组件才能使该 CLI 运行,因此它需要完全像在 docker-compose.yml 中声明的服务一样运行。要求:
- 我需要以临时方式运行它。这是供操作员进行故障排除的,所以我不知道我什么时候需要它
- 它需要是交互式的,因为它需要人工进行故障排除
- 它需要能够运行任意映像(通常是为主服务及其 CLI 构建的映像,但有时可能需要通过其他容器进行其他诊断,我不会提前知道)
- 它需要完全访问为堆栈设置的网络和其他资源,就好像它是其中的常规预定义服务一样
到目前为止,我能做的最好的事情是:
- 查找运行我的服务映像的现有容器
- 通过 SSH 连接到运行它的 swarm 主机
-
docker exec -ti进入它以调用 CLI
然而,这有许多缺点:
- 我不想弄乱已经运行的容器,它有一项重要的工作我不想意外中断,而且它的状态可能与我需要做的事情无关,我不想破坏它
- 它依赖于安装了 CLI 的服务映像。如果我想将两者分开,我就不走运了
- 它依赖于 一些 已经在运行的容器。如果我的服务完全关闭并处于重启循环中,我将完全被淹没,因为我无处可执行和运行我的 CLI
- 我只能在我已经声明和运行的上下文中执行。如果我需要事先没有想到要添加的东西,很遗憾我不走运
- 找到运行容器的特定主机并手动去那里真的很烦人
我真正想要的是docker run 的一个版本,我可以指向堆栈并说“在那里运行”,或者docker stack run,但我找不到任何类似的东西。这样做的正确方法是什么?
【问题讨论】:
标签: docker docker-compose docker-swarm docker-stack