【问题标题】:Extract docker-compose.yml from an existing Docker Swarm从现有的 Docker Swarm 中提取 docker-compose.yml
【发布时间】:2021-07-07 11:22:49
【问题描述】:

我在 Swarm 中有一个现有堆栈,我想向其中添加一些模板化变量。 Swarm 目前由 Portainer 管理,但不是在其中创建的。我不再有权访问创建堆栈的原始 YML,并且自从使用它以来已经对服务进行了许多编辑。

Portainer 让我可以轻松地添加和删除服务,但将服务与堆栈相关联的能力似乎需要原始 YML。

是否有从现有堆栈中提取 YML 文件的自动化方法?如果没有,有没有办法在不使用docker stack deploy 的情况下将新服务与现有堆栈相关联?

【问题讨论】:

  • 我目前正在尝试在我们的暂存环境中使用com.docker.stack.namespace。我相信这只会允许快捷 DNS 解析,因此只要从同一命名空间中的另一个服务请求,名为 ecoeats_db 的服务将仅使用 db 解析。

标签: docker docker-swarm portainer


【解决方案1】:

docker stack deploy 可以轻松地将新服务添加到现有堆栈命名空间。只是不要使用--prune 标志。

我们在生产和暂存 CD 管道中大量使用它,因为我们使用堆栈作为环境,因此将多个微服务发布到一个堆栈中 - 通过传递多个 --compose-file 指令或执行单个 --compose-涉及单个服务时部署文件堆栈。


dockers dns 解析更有趣。 Docker 不知道您的服务部署到的堆栈命名空间 - dns 由您的服务附加到的网络以及已隐式自动分配给您的服务的网络别名解析。

使用docker service create --network name=my-network,alias=web1 可以在服务级别显式控制网络别名,完全没有堆栈,并且在撰写文件中服务的网络部分也有类似的别名语法。

【讨论】:

  • 这非常有帮助,感谢您的解释。由于我可以使用堆栈部署添加新服务,因此无需维护一个正在运行的 compose 文件,其中包含我猜想的所有堆栈信息。你会在 git 中跟踪你更新的 mini compose 文件吗?
  • 我们愿意。 gitlab 是我们存储堆栈文件的地方,当项目或堆栈文件发生更改时,可以访问 swarm 的 gitlab 运行程序用于部署更改。
  • @chris-beke 有点跑题了,但是你有没有遇到过 docker swarm not 在更新服务镜像后停止旧容器的问题?在使用 portainer 触发重新部署后,我经常不得不手动运行 docker service update xyz 而不使用任何参数来让 Swarm 杀死旧容器。
  • 我从来没有像这样孤立过服务,除非它们处于期望状态=已停止并且它们继续运行。它们所在的节点通常需要重新启动。
猜你喜欢
  • 1970-01-01
  • 2018-10-18
  • 2020-04-27
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
相关资源
最近更新 更多