我经常发现自己需要重新创建容器,对最初用于docker run
容器的参数进行微小修改(比如更改已发布的端口,网络,内存量等)。
现在我正在制作图像并运行它们来代替旧容器。
这样可以正常工作,但我并不总是保留docker run
的原始参数,有时(特别是当有很多事情需要定义时),恢复它们会变得很痛苦。
有没有办法从现有容器中恢复docker run
个参数?
答案 0 :(得分:7)
抱歉,迟到了几年,但是我有一个类似的问题,但还没有令人满意的答案,所以我仍然需要找到出路。
我找到了两个解决此问题的消息源:
要运行,请将其保存到文件中,例如
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
的{{1}}参数。我喜欢它,因为它简单,优雅,并且不需要其他工具。
我对my forked gist进行了一些改进,并通知了原始作者。
我希望它对其他人有帮助:)
答案 1 :(得分:0)
执行此操作的最佳方法是不手动键入命令。将它们放入shell脚本... linux / mac上的.sh
文件或Windows上的.cmd
文件。然后你只需运行shell脚本来创建容器,你就不必担心重新输入命令和选项,你永远不会弄错它们等等。
就个人而言,我用&#34; npm脚本编写我的脚本&#34;在我的package.json文件中。但是任何可以运行带参数的命令行程序
的工具都可以完成同样的事情我这样做以及make sure i never fail to build my images or run my containers的其他一些技巧。使docker生活变得更容易。 :)
答案 2 :(得分:0)
您可以使用select *
from t
where find_in_set(uniq, (
select group_concat(uniqs)
from (
select group_concat(case when t2.idw like '%\_pronto\_' then t2.uniq end) as uniqs
from t t2
group by userid,
idc
having count(*) > 1
) t
)) = 0;
来获取容器的配置。从那里重建realm
命令可能有点单调乏味。
另一种选择是使用docker inspect
或docker run
搜索您的shell历史记录(如果您使用history | grep "docker run"
)。这样,你不需要尽力保存命令,但仍然可以快速恢复它们。
答案 3 :(得分:0)
对此有几点答案。使用docker-compose
运行容器,然后您可以运行撰写文件并保留所有配置。显然,compose是针对多容器应用程序而设计的,但对于单容器,复杂run
参数用例而言被大量低估。
第二个是将run
命令放入图像上的LABEL
。看看Label Schema的docker.cmd
等等......然后您可以从图像(或从Dockerfile)轻松检索。