【问题标题】:How to copy entire container?如何复制整个容器?
【发布时间】:2020-09-01 11:18:56
【问题描述】:

我在 3 台机器中的一台上运行容器(由管道动态获取),我遇到了服务器启动问题并分析故障,我需要其他人的帮助,但考虑到他的可用性,我不能说他什么时候将可用。

而且我不能一直占用运行容器的主机,因为团队中的其他成员需要它。

另外,下一次,当开发人员可用时,我将不得不触发构建并将其带到可以向开发人员显示问题的阶段,但这需要时间。

在这种情况下,有什么办法,我可以停止该容器并获取它的整个副本,并在下次需要时运行它,这样我就可以让容器处于需要的状态,而且这也更省时。

【问题讨论】:

  • 容器内的应用程序应该记录错误。收集日志并将它们转发给您的开发人员就足够了。
  • 关于实验性的有趣读物docker checkpoint: technology.amis.nl/2018/04/08/…
  • 你知道是什么触发了错误吗?你能docker run同一个版本的同一个图像,并引起问题吗?将那个描述发送给正在调试的开发人员,他们可以把它变成一个可以自动运行的测试用例。

标签: docker containers devops


【解决方案1】:

您可以使用docker commit基于现有容器创建Docker镜像,例如:

docker commit my-container image-from-my-container
# return an image SHA

然后你可以根据你提交的镜像运行一个容器(匹配你提交时的容器状态)

docker run [OPTIONS] image-from-my-container

如果您还需要将图像导出到另一台机器(因为其他团队成员可能需要原始机器),您可以:

  • 使用 docker image push 将映像推送到远程注册表并从另一台计算机运行它
  • 使用docker image save image-from-my-container > saved-image.tar 将图像导出到TAR 文件,将存档下载到另一台机器,然后使用docker image load -i saved-image.tar 加载它

【讨论】:

  • 你几乎不应该使用docker commit。在这种特定情况下,它会生成一个图像,这将回答问题中极其具体的用例;即便如此,我也不能告诉你这个过程是如何进入这个状态的,所以我不能真正使用提交的图像来编写一个很好的测试用例来重现这个问题。
  • 是的,使用从容器生成的图像可能无助于解决问题,因为可能涉及许多其他因素,但它确实回答了如何“复制”容器的问题。至少使用创建的图像可以抛开容器本身的问题并开始寻找其他地方
猜你喜欢
  • 2020-09-16
  • 2018-03-25
  • 2021-04-06
  • 2014-05-06
  • 2017-05-26
  • 2011-09-07
  • 1970-01-01
  • 2012-03-15
  • 2014-11-16
相关资源
最近更新 更多