如何重启Docker Stack中的特定容器?停止命令无效问题
如何单独重启Docker Stack中的特定容器
首先明确:可以单独重启Docker Stack(Swarm服务)中的特定容器,但不能直接用docker container stop/start操作——因为Swarm的服务副本管理机制会自动重建被停止/删除的容器,这就是你执行停止命令后,docker container ls里仍有该服务容器的原因(实际是Swarm新建的替换容器)。
为什么你的操作没效果
当你通过docker container stop <容器ID/名称>停止Swarm服务下的容器时,Swarm会检查服务的期望副本数(比如docker-compose.dev.yml中deploy.replicas定义的数量),发现当前运行副本数不足,会立刻启动一个新的容器来补全,所以你看到的docker container ls结果里的容器,其实是Swarm新建的替代容器,而非你停止的那个原容器。
正确的单个容器重启方法
要单独重启某个服务的特定副本,按以下步骤操作:
- 先找到对应服务的副本task ID:
执行命令查看目标服务的所有副本:
在输出中找到你要重启的副本对应的docker service ps mystack_nodejsID(就是容器名称中.1.后面的那串字符,比如你的是4h03pnxae13ejqwdbsegstmib)。 - 触发该副本的重新调度(即重启):
用以下命令强制更新该特定task,Swarm会停止原容器并启动新的副本:docker service update --force --task-id 4h03pnxae13ejqwdbsegstmib mystack_nodejs
补充:重启整个服务的所有副本
如果你需要重启该服务的全部副本,直接执行:
docker service update --force mystack_nodejs
这个命令会触发服务的滚动更新,逐个重启所有副本,不会影响其他服务的运行(比如你正在调试的Django容器)。
内容的提问来源于stack exchange,提问作者MsA
相关产品推荐
相关产品推荐

