为什么执行docker stop CONTAINERID会自动删除已停止容器?如何避免?
问题原因
你遇到的容器停止后自动删除的情况,是启动容器时添加的--rm参数导致的,该参数的原生设计逻辑就是:容器从运行状态退出(无论主动停止、异常崩溃还是进程正常结束)后,自动销毁所有容器相关资源,这个逻辑和你使用的Docker 20.10版本没有冲突,属于预期行为。
解决方法
针对当前已经启动的带--rm参数的容器
只要容器还处于运行状态,你可以先修改容器的自动删除配置,再停止容器,即可保留容器资源:
- 执行更新命令关闭自动删除规则:
docker update --rm=false <容器ID或容器名> - 之后正常执行停止命令即可:
docker stop <容器ID或容器名>
后续需要重启时,直接执行docker start <容器ID或容器名>就能正常启动容器。
后续启动容器的规避方案
- 如果不需要容器退出后自动清理资源,启动命令直接去掉
--rm参数即可:docker run -dit --name somename someimages:v1.2.3 - 如果是临时使用的场景需要保留
--rm参数,仅特定场景需要保留容器,按上述已启动容器的修改方案操作即可。
补充说明
--rm参数的设计初衷是适配一次性临时容器的使用场景,比如单次运行测试脚本、临时验证镜像功能等,避免大量用完即弃的容器残留占用磁盘和进程资源,正常需要持久化运行、后续需要重启的容器不建议添加该参数。
内容的提问来源于stack exchange,提问作者Saverio Guzzo
相关产品推荐
相关产品推荐

