【问题标题】:What is exactly happening when you're Docker Commiting a container?当你 Docker 提交一个容器时到底发生了什么?
【发布时间】:2016-06-19 06:35:57
【问题描述】:

我知道,例如,当您使用 docker commit abcdefgh ola/minhaimagem:1.0 时,您会将 abcdefgh 容器中的更改保存到新图像中,以便将来再次使用它。但是,我注意到有时提交运行得很慢,这一事实在我脑海中产生了一个问题,提交运行时到底发生了什么?我的意思是,引擎盖下发生了什么?

【问题讨论】:

  • 维护人员注意:这是一个堆栈溢出问题,与服务器故障无关。

标签: docker dockerfile docker-machine


【解决方案1】:

docker commit中所述:

默认情况下,正在提交的容器及其进程将在提交映像时暂停。这降低了在创建提交的过程中遇到数据损坏的可能性。

该步骤(等待进程暂停)可能需要一些时间。

如果不希望出现这种行为,请将 --pause 选项设置为 false。

您可以在api/server/router/image/image_routes.go#postCommit() 中看到实际的提交调用,然后通过后端路由到daemon/commit.go#Commit()

【讨论】:

  • 这个问题可能更相关的上下文是“我最近提交了一个 docker 容器状态,它只花了大约 5 秒。现在我的提交花费了 > 2 分钟;为什么会这样?
  • 就我而言,我确实在容器中生成了 anaconda 环境、图像数量和 .json 文件,但我看到磁盘使用率仅从上次的 ~33% 上升到 ~44%这次
  • 在考虑了这一点之后,我意识到学习如何在 Dockerfile 中自动执行此操作可能会更容易,因此 conda 安装的所有细节都不会减慢一切。我阅读了您的其他答案之一,说明这是最佳做法
  • @Nathan 是的,就是这个想法。不要忘记多阶段构建;它可以帮助你的情况:stackoverflow.com/a/58254461/6309
猜你喜欢
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 2014-04-01
  • 1970-01-01
  • 2011-01-21
  • 2014-08-22
  • 2015-02-26
相关资源
最近更新 更多