我正在运行一个由一个管理器节点和一个工作节点组成的docker swarm。我的应用程序正在运行。例如,Wordpress堆栈由一个wordpress服务,一个mysql服务和一个备份服务组成。 在docker-compose.yml文件中,我使用以下约束来确保wordpress仅在worker节点上运行。:
deploy:
placement:
constraints:
- node.role == worker
要启动堆栈,请运行命令:
docker stack deploy -c ~/myapp/docker-compose.yml myapp
到目前为止,一切都按预期进行。
问题现在是,当我更改配置时(在docker-compose.yml文件中),我在我的管理器节点上调用相同的命令来重启堆栈:
docker stack deploy -c ~/myapp/docker-compose.yml myapp
服务正在重新启动,我可以看到我的更改。 但现在旧容器仍在运行。他们抢夺内存和CPU。
为什么会发生这种情况?为什么docker swarm在更新后不会停止旧容器?我必须手动停止它们。
答案 0 :(得分:0)
To"停止"堆栈,你需要docker stack rm [stack-name]
:
docker stack rm myapp
#check the status on that bad boy before re-deploying:
docker stack ps myapp
我同意你的假设,即应该重新启动堆栈,对正在运行的堆栈调用docker stack deploy
- 不确定堆栈是否有重新部署的特殊原因。