我经常需要重新创建容器,并进行一些微小的修改以用于 docker run
命令,例如更改已发布的端口、网络或内存大小等参数。
现在我正在创建映像并将其运行代替旧容器。
这种方法可以很好地工作,但我并不总是保存了原始的 docker run
参数,有时候(尤其是参数很多的情况下)恢复它们会变得非常麻烦。
是否有任何方法可以从现有的容器中恢复 docker run
的参数?
我经常需要重新创建容器,并进行一些微小的修改以用于 docker run
命令,例如更改已发布的端口、网络或内存大小等参数。
现在我正在创建映像并将其运行代替旧容器。
这种方法可以很好地工作,但我并不总是保存了原始的 docker run
参数,有时候(尤其是参数很多的情况下)恢复它们会变得非常麻烦。
是否有任何方法可以从现有的容器中恢复 docker run
的参数?
很抱歉耽误了几年,但我有一个类似的问题,并且还没有令人满意的答案,所以我仍然需要找到出路。
我找到了两个解决方案:
要运行,请将其保存到文件中,例如
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中进行了一些改进,并通知了原始作者。
对此有几个答案。使用docker-compose
运行您的容器,然后您可以只需运行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
)。这样,您就不需要费额外劲儿来保存命令,但仍然可以快速恢复它们。