【问题标题】:docker container created and deleted automaticallydocker容器自动创建和删除
【发布时间】:2021-10-09 02:23:53
【问题描述】:

我正在尝试在我的 docker 桌面上启动 tomcat,我按照 docker hub 上的官方 tomcat 教程进行操作。但不知何故,我发现 docker 每次运行命令后都会创建一个新容器: docker run -it --rm tomcat 并在tomcat关闭时自动删除容器。

我已经知道原因是 run --rm 可以在容器退出时自动移除容器。

现在我终于在 tomcat 上建立了网络,我不希望它们消失。 如何在容器被删除之前保存它?

谢谢! ;D

【问题讨论】:

  • 为什么需要这样做?容器中不应该有任何重要的东西;按照您的描述重新创建容器是非常常规的。另外:为什么 Tomcat 退出了?

标签: docker tomcat


【解决方案1】:

根据我在互联网上的发现,目前无法删除 --rm 标志。 docker update 使您能够在启动容器后更新一些参数,但您无法根据 document 更新清理标志 (--rm)。

参考资料:

I started a docker container with --rm Is there an easy way to keep it, without redoing everything?

Cancel --rm option on running docker container

但可以应用一些解决方法。您可以将当前容器导出到映像,充当检查点,然后您可以在没有 --rm 标志的情况下基于您导出的映像启动一个新容器。您可以使用docker commit 这样做:

docker commit [your container name/id] [repo/name:tag]

(使用docker ps 列出您的容器,在新的 bash/cmd/PowerShell 会话中执行此操作,否则退出 docker 容器时您将丢失工作)

然后启动一个没有--rm标志的新容器:

docker run -it [repo/name:tag]

免责声明:

在生产环境中,永远不要通过在其中运行bashsh 来更改容器。请改用Dockerfiledocker buildDockerfile 会给你一个可重现的配置,即使你删除了你的容器。按照设计,容器不应该有任何重要的数据(也就是不持久的)。使用图像和卷来保存您的自定义更改和配置。

【讨论】:

  • 感谢您的帮助!现在我已经建立了一个包含我所有内容的新容器。您提供的命令既有效又方便。再次感谢。
  • docker commit 几乎从来都不是最佳实践。提交容器后,现在基本上不可能更新内部的 Tomcat,因为您没有记录在其上应用自定义更改的步骤。
  • @DavidMaze 感谢您的评论,我在原始答案下方添加了免责声明,指出容器不是持久的。当您是 docker 新手并且不知道如何构建映像时,该解决方法很有用。在 google 和 StackOverflow 上搜索了几个小时后,您知道您不应该即时进行更改,并且不能使用 --rm 标志保留容器,并且应该使用 Dockerfile 进行可重现的更改。但是您已经在该容器中投入了大量时间。下次你可能会使用 Dockerfile,但你绝对不想丢失你当前的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 2017-08-10
  • 2019-03-24
  • 2018-11-17
相关资源
最近更新 更多