我正在尝试将服务添加到堆栈中,然后再对其进行部署。但是,此新服务在与堆栈内部的服务(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/