我经常发现自己需要重新创建容器,并对最初用于
docker run
容器的参数进行少量修改(例如更改已发布的端口、网络、内存量)。
现在我正在制作图像并运行它们来代替旧容器。
这工作正常,但我并不总是保存原始参数
docker run
,有时(特别是当有很多东西需要定义时)恢复它们变得很痛苦。
有什么方法可以从现有容器中恢复
docker run
参数吗?
抱歉晚了几年,但我也有类似的问题,但还没有令人满意的答案,所以我仍然需要找到出路。
我找到了两个解决该问题的来源:
要运行,请将其保存到文件中,例如
并做run.tpl
docker inspect --format "$(<run.tpl)" name_or_id_of_running_container
快速运行:
$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod <container>
这两种解决方案使用起来都非常简单,但是第二个解决方案无法生成 Nginx 容器的命令,因为他们没有设法像这样引用它
"nginx" "-g" "daemon off;"
因此,我专注于第一个解决方案,这是一个 golang 模板,旨在提供
--format
的 docker inspect
参数。我喜欢它,因为它简单、优雅,而且不需要其他工具。
我对我的分叉要点做了一些改进,并通知了原作者。
对此有几个答案。使用
docker-compose
运行容器,然后您可以运行撰写文件并保留所有配置。显然 compose 是为多容器应用程序设计的,但对于单容器、复杂的 run
参数用例来说,它的作用被严重低估了。
第二个是将
run
命令放入图像上的 LABEL
中。看看 Label Schema 的 docker.cmd
等...然后您可以轻松地从图像(或 Dockerfile)中检索。
执行此操作的最佳方法是不要手动键入命令。将它们放入 shell 脚本中...linux/mac 上的
.sh
文件,或 Windows 上的 .cmd
文件。然后你只需运行 shell 脚本来创建你的容器,你永远不必担心重新输入命令和选项,你永远不会弄错它们,等等。
就我个人而言,我在 package.json 文件中使用“npm scripts”编写脚本。但使用任何可以使用参数运行命令行程序的工具都可以完成同样的事情
我这样做以及其他一些技巧是为了确保我永远不会失败构建我的图像或运行我的容器。让 docker 的生活变得更加轻松。 :)
您可以使用
docker inspect
来获取容器的配置。不过,从中重建 docker run
命令可能有点乏味。
另一个选项是使用
history | grep "docker run"
或 ctrl+r
(如果您使用 bash
)搜索 shell 历史记录。这样,您无需特意保存命令,但仍可以快速恢复它们。