有没有办法检索最初用于创建Docker容器的命令?

时间:2017-11-21 16:08:25

标签: docker

这个问题似乎经常被问到,但我找不到任何正确且明确指明如何实现这一目标的答案。

我经常创建运行一段时间的测试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元素,但忽略MountsConfig.EnvConfig.ExposedPorts,{{1等元素。

3 个答案:

答案 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刷新到磁盘。