任何方式来检索最初用来创build一个Docker容器的命令?
这个问题似乎经常被问到,但我找不到任何正确,清楚地指出如何完成这个问题的答案。
我经常创buildtestingdocker容器,我运行了一段时间。 最终我停止容器,并使用docker start <name>
重新启动它。 但是,有时我正在寻找升级到更新的图像,这意味着删除现有的容器,并从更新的图像中创build一个新的。
我一直在寻找一种可靠的方法来检索原来用于创build容器的“docker run”命令。 大多数响应表明只需使用Config.Cmd
docker inspect
并查看Config.Cmd
元素,但这是不正确的。
例如,创build一个容器为:
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Qwerty123<(*' -e TZ=America/Toronto -p 1433:1433 -vc:/dev/docker/mssql:/var/opt/mssql --name mssql -d microsoft/mssql-server-linux
使用docker检查将显示:
$ docker inspect mssql | jq -r '.[0]["Config"]["Cmd"]' [ "/bin/sh", "-c", "/opt/mssql/bin/sqlservr" ]
在github上为这个相同的请求创build了很多问题 ,但是由于info已经在inspect
输出中,所有的问题都被closures了 – 只需要知道如何读取它。
有没有人创build一个实用工具,轻松地从inspect
命令的输出重build命令? 我所见过的所有回应都引用了错误信息,特别是检查Config.Cmd
元素,但忽略了Mounts
, Config.Env
, Config.ExposedPorts
, Config.Volumes
等元素。
有几个公用事业可以帮助你。
试一试
https://github.com/bcicen/docker-replay
https://github.com/lavie/runlike
如果你想知道更多这样的docker工具很酷的工具检查这个https://github.com/veggiemonk/awesome-docker
当然,docker检查是要走的路,但如果你只是想“重build”docker运行命令,你有
https://github.com/nexdrew/rekcod
它说
从现有容器反向devise泊坞窗运行命令(通过docker检查)。
另一种方法是Christian G答案
如何显示Docker容器的运行命令
使用bash-preexec