为何Docker容器即便重启也保留变更?未执行docker commit也默认持久化吗?
Docker容器变更持久化问题解答
问题1:即便不执行docker commit,容器的变更是否默认会在重启后持久化?
- 默认规则下,容器的运行时变更存储在专属的可写层中,持久化逻辑如下:
- 只要容器未被删除(仅执行
docker stop/docker restart操作、Docker守护进程重启),可写层的内容会一直保留,变更会持久存在 - 若执行
docker rm删除容器,对应的可写层会被同步销毁,正常情况下变更不会残留
- 只要容器未被删除(仅执行
- 你删除容器后重新启动仍能看到
/tmp/test.log属于操作偏差导致:docker commit命令默认不会修改原基础镜像,你启动新容器时使用的镜像已经是包含变更的非原始ubuntu镜像,大概率是你操作时误将提交的镜像覆盖了本地的ubuntu标签,而非原基础镜像被修改。
问题2:如果这是默认行为,是否有功能可以关闭容器变更的持久化?
- 有三种常用方案可以实现容器变更不持久化:
- 启动容器时添加
--read-only参数,将容器的可写层设置为只读,所有运行时写入操作仅在临时文件系统中生效,容器停止/删除后所有变更直接清除,示例命令:docker run --read-only ubuntu - 若容器需要写入特定目录(比如你的场景需要写
/tmp),可以搭配--tmpfs参数给指定路径挂载临时内存文件系统,写入的内容不会落盘持久化,示例命令:docker run --read-only --tmpfs /tmp ubuntu - 单次临时使用的容器可以添加
--rm参数,容器停止运行后会自动删除,同步销毁可写层,不会残留任何变更,示例命令:docker run --rm ubuntu
- 启动容器时添加
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

