docker - 部署堆栈后将服务添加到堆栈

标签 docker docker-compose docker-swarm docker-swarm-mode docker-stack

我正在尝试将服务添加到堆栈中,然后再对其进行部署。但是,此新服务在与堆栈内部的服务(redis)通信时遇到了麻烦。

这是我目前对堆栈和服务的了解,如果有任何不正确之处,请告诉我。

堆栈是服务之上的抽象,提供了DNS等有用的实用程序,因此跨堆栈的服务可以相互通信。堆栈使我们能够从逻辑上分离出可能在同一群中运行的服务组(以便不同的开发团队可以共享同一群)。

我想首先将堆栈部署到一个群集(通过组合文件),然后定期添加容器,如this article about one-shot containers中所述。这些容器之所以不同,是因为它们执行长时间的有状态操作。他们需要以某种初始状态旋转起来,做他们的工作,然后离开。它们是不同的,因为它们不需要复制或负载平衡。

本质上,我想做的是:

启动一个“堆栈”,如下所示:
docker stack deploy --with-registry-auth --compose-file docker-compose.yml my-stack
然后一段时间后,当满足某些条件时,添加如下容器:
docker service create -name statefulservice reponame/imagename
而且这通常会达到预期的效果,除了有状态服务无法与我的堆栈中的Redis对话。

我相信statefulservice的设计正确,因为当将其添加到docker-compose.yml中时,它的行为将达到预期的效果。

可能相关或可能不相关的进一步细节是,从群内的容器发出创建新服务的命令。使用docker的go sdk会发生这种情况,而我使用的是one-shot container article described

我怀疑这无关紧要的原因:仅通过docker-cli进行此操作时,我仍然会遇到此问题(并且不使用docker sdk进行操作)。

最佳答案

当您像这样部署堆栈时:

docker stack deploy --with-registry-auth --compose-file docker-compose.yml my-stack

它创建了一个名为my-stack_default的网络

因此,要启动可以与该stack中的服务进行通信的服务,您需要像这样启动它们:
docker service create -name statefulservice --network my-stack_default reponame/imagename

关于docker - 部署堆栈后将服务添加到堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51199134/

相关文章:

python - 模块未找到错误: No module named 'pymongo' with Docker and Airflow

database - Docker Swarm 如何处理数据库(PostgreSQL)复制?

r - Ubuntu 18.4安装R语言3.5

docker - `docker-compose logs` 从哪里拉?

docker - 将服务参数传递给docker-compose up

mysql - 无法使用 go 和 docker 连接到 mysql 服务器 - 调用 tcp 127.0.0.1 :3306: connect: connection refused

amazon-web-services - 无法连接到 docker 容器

docker - 在 Docker 中, "Error response from daemon: could not choose an IP address to advertise since this system has multiple addresses on different interfaces"

python - 将 python for 循环的一次迭代的输出通过管道传输到另一个脚本

bash - Docker 容器启动命令未获取 .bashrc 变量