在Docker堆栈部署'

时间:2018-03-31 23:11:33

标签: docker docker-swarm

我正在运行一个由一个管理器节点和一个工作节点组成的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在更新后不会停止旧容器?我必须手动停止它们。

1 个答案:

答案 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 - 不确定堆栈是否有重新部署的特殊原因。