最近遇到一個問題,有一個容器執行了很久,由於時間太久遠,已經忘記當初的啟動引數,也並沒有使用 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.'
--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 協議》,轉載必須註明作者和本文連結