从已运行容器获取docker run参数
最近遇到一个问题,有一个容器运行了很久,由于时间太久远,已经忘记当初的启动参数,也并没有使用
docker-compose
,
k8s
这样的编排工具。
现在我想新建一个和它一样的容器,或者重启容器,如何找回之前使用的完整
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.' \