从已运行容器获取 docker run 参数

最近遇到一个问题,有一个容器运行了很久,由于时间太久远,已经忘记当初的启动参数,也并没有使用 docker-composek8s 这样的编排工具。

现在我想新建一个和它一样的容器,或者重启容器,如何找回之前使用的完整docker run参数呢?

查看在运行容器隐藏参数

我们知道使用 docker ps 可以查看运行的容器信息,其中有一个参数 --no-trunc 可以显示隐藏部分的信息。

这个参数的主要作用就是不要截断输出内容。但是很遗憾,虽然显示的内容多了,然而没有我们需要的run参数。

$ docker ps --no-trunc
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b677ba6 nginx "/sbin/tini -- run.sh" 1 month ago Up 1 month 443/tcp nginx1

docker inspect

为了找回启动参数我们尝试使用 docker inspect, 这个显示的信息比较全,是一个json格式,内容很多,我们需要挑选参数,自己组装,但是其结果也并不明显。

$ docker inspect -f "{{.Name}} {{.Path}} {{.Args}} {{.Config.Cmd}}" nginx1

/nginx /sbin/tini [-- run.sh] [/sbin/tini -- run.sh]

runlike

经过一番搜索后,发现一个神奇的工具runlike, 这个工具就是专门干这个事情的。

See this docker container? I wish I could run another one just like it, but I’ll be damned if I’m going to type all those command-line switches manually!

容器化安装

runlike提供了一个封装好的容器镜像 assaflavie/runlike.

首先我们拉取镜像

docker pull assaflavie/runlike

它的用法很简单

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike YOUR-CONTAINER

可以通过增加-p参数,让显示结果自动换行,下面是我的真实测试:

$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike -p nginx

docker run
--name=nginx
--hostname=f29562eb37f9
--mac-address=02:42:ac:11:00:03
--env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
--env=UID=991
--env=GID=991
--volume=/data/nginx/log:/var/log/nginx
--volume=/data/nginx/certs:/certs
--volume=/data/nginx/main:/main
--volume=/data/nginx/sites-enabled:/sites-enabled
--volume=/data/nginx/conf:/conf.d
--volume=/certs
--volume=/conf.d
--volume=/passwds
--volume=/sites-enabled
--volume=/var/log/nginx
--volume=/www
--expose=2200
-p 443:4430
-p 80:8000
--restart=always
--label='description=nginx built from source.'
--label='nginx=nginx 1.11.3.'
--label='openssl=LibreSSL 2.4.2.'
--runtime=runc
--detach=true
nginx
/sbin/tini -- run.sh

如果想更方便的话可以使用别名运行它,例如,将其保存在 ~/.profile 或者 ~/.bashrc 文件中,如下:

alias runlike="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike"

然后就可以像本地命令一样使用啦,使用 runlike YOUR-CONTAINER

最后

如果想避免忘记参数的情况,还是使用容器编排工具吧,方便快捷,永不忘记。

本作品采用《CC 协议》,转载必须注明作者和本文链接
微信公众号:码咚没 ( ID: codingdongmei )
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!