恢复 Docker 容器的运行参数

8

我经常需要重新创建容器,并进行一些微小的修改以用于 docker run 命令,例如更改已发布的端口、网络或内存大小等参数。

现在我正在创建映像并将其运行代替旧容器。

这种方法可以很好地工作,但我并不总是保存了原始的 docker run 参数,有时候(尤其是参数很多的情况下)恢复它们会变得非常麻烦。

是否有任何方法可以从现有的容器中恢复 docker run 的参数?

4个回答

9

很抱歉耽误了几年,但我有一个类似的问题,并且还没有令人满意的答案,所以我仍然需要找到出路。

我找到了两个解决方案:

要运行,请将其保存到文件中,例如run.tpl,然后执行 docker inspect --format "$(<run.tpl)" 运行中容器的名称或 ID

快速运行:$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod <container>

这两种解决方法都很简单易用,但第二种无法为 Nginx 容器生成命令,因为他们没能让它像这样带引号:"nginx" "-g" "daemon off;"

因此,我关注了第一种解决方案,它是一个 Golang 模板,旨在提供给 docker inspect--format 参数使用。我喜欢它,因为它相对简单、优雅,而且不需要其他工具。

我在我的分支 Gist中进行了一些改进,并通知了原始作者。


1

对此有几个答案。使用docker-compose运行您的容器,然后您可以只需运行compose文件并保留所有配置。显然,compose是为多容器应用程序设计的,但在单容器、复杂的run参数使用情况下被严重低估。

第二种方法是将您的run命令放入镜像的LABEL中。查看Label Schemadocker.cmd等...然后您可以轻松从镜像(或从您的Dockerfile)检索。


0

最好的方法不是手动输入命令,而是将它们放入一个 shell 脚本中... 在 Linux/Mac 上是一个 .sh 文件,在 Windows 上是一个 .cmd 文件。然后你只需运行 shell 脚本来创建容器,你就不必担心重新输入命令和选项,也不会出错等。

个人而言,我使用我的 package.json 文件中的 "npm scripts" 来编写脚本。但是任何能够带参数运行命令行程序的工具都可以做到同样的事情。

我还使用了其他一些技巧确保我永远不会失败地构建我的镜像或运行我的容器。这让使用 Docker 变得非常容易。 :)


感谢建议,但这不适合我的情况。当你在某个项目上工作并且知道将来需要创建容器时,Shell 脚本是很好的选择。但我经常事先并不知道这一点。我使用 Docker(以及其他工具)来尝试新东西,因此我经常创建\丢弃容器,并且后续只需要其中的一个小部分(未知)。在这种情况下,管理 Shell 脚本太过繁琐和麻烦。 - Eugene Loy

0
你可以使用 docker inspect 命令获取容器的配置。但从中重建出 docker run 命令有点繁琐。
另一个选择是搜索您的 shell 历史记录,使用 history | grep "docker run"ctrl+r(如果您使用的是 bash)。这样,您就不需要费额外劲儿来保存命令,但仍然可以快速恢复它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接