这个问题似乎经常被问到,但我找不到任何正确且明确指明如何实现这一目标的答案。
我经常创建运行一段时间的测试docker容器。最后我停止容器并使用docker start <name>
重启它。但是,有时我希望升级到更新的图像,这意味着删除现有容器并从更新的图像中创建一个新容器。
我一直在寻找一种可靠的方法来检索原先用于创建容器的'docker run'命令。大多数回复表明只需使用docker inspect
并查看Config.Cmd
元素,但这不正确。
例如,将容器创建为:
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Qwerty123<(*' -e TZ=America/Toronto -p 1433:1433 -v c:/dev/docker/mssql:/var/opt/mssql --name mssql -d microsoft/mssql-server-linux
使用docker inspect将显示:
$ docker inspect mssql | jq -r '.[0]["Config"]["Cmd"]'
[
"/bin/sh",
"-c",
"/opt/mssql/bin/sqlservr"
]
此同一请求有很多issues created on github,但由于信息已经在inspect
输出中,因此所有信息都已关闭 - 只需要知道如何阅读。
是否有人创建了一个实用程序,可以轻松地从inspect
命令的输出重建命令?我看到的所有回复都提到错误信息,特别是检查Config.Cmd
元素,但忽略Mounts
,Config.Env
,Config.ExposedPorts
,{{1等元素。
答案 0 :(得分:1)
那里有很少的实用程序可以帮助你。
试一试
https://github.com/bcicen/docker-replay
https://github.com/lavie/runlike
如果您想了解更多关于docker的酷工具,请查看https://github.com/veggiemonk/awesome-docker
答案 1 :(得分:1)
当然,docker inspect是要走的路,但是如果你只是想“重建”docker run命令,你就有了
https://github.com/nexdrew/rekcod
它说
从现有容器中反向设计docker run命令(通过docker inspect)。
另一种方式是Christian G回答
How to show the run command of a docker container
使用bash-preexec
答案 2 :(得分:0)
我遇到了同样的问题,最终查看了.bash_history文件以找到我使用的命令。 这将为您提供所有要运行的docker create命令;
grep 'docker create' .bash_history
注意:如果您在同一会话中运行docker create,则需要注销/登录以将.bash_history刷新到磁盘。