
我已經從 dockerscript 建立了一個 docker 容器,例如
user@servername:~$ echo "FROM ubuntu:latest" > dscript.txt
user@servername:~$
user@servername:~$ cat dscript.txt
FROM ubuntu:latest
user@servername:~$ docker build -t ubu.image - < dscript.txt
Sending build context to Docker daemon 2.048kB
Step 1/1 : FROM ubuntu:latest
---> 0ef2e08ed3fa
Successfully built 0ef2e08ed3fa
我可以使用我給出的圖像名稱來運行它,即ubu.image
:
user@servername:~$ docker run -it ubu.image
root@c00379445b9d:/# exit
exit
user@servername:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
user@servername:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
但要導出它,我必須使用提交雜湊:
user@servername:~$ docker export c00379445b9d > ubu.image.tar
我嘗試使用容器名稱而不是哈希值,但它會引發錯誤:
$ docker export ubu.image > ubu.image.tar
Error response from daemon: No such container: ubu.image
問題是:
有沒有辦法找到將容器匯出為
.tar
文件所需的容器的最新提交雜湊值?如果沒有最新的提交哈希,是否可以將容器匯出為
.tar
檔案?是這樣,怎麼樣?
答案1
您ubu.image
使用的是映像名稱,而不是容器名稱,因此您不能在 的參數中使用它docker export
。
如果你知道容器名稱,那麼你可以直接使用它來導出:
docker export <container name>
或獲取其哈希值:
docker ps -aqf 'name=<container name>'
如果沒有容器名稱,您可以獲得具有給定鏡像名稱的所有容器清單:
docker ps -aqf 'ancestor=<image name>'
請注意,它將返回從給定映像建置的所有容器。
更好的方法是設定您自己的容器label
,以便您可以使用它來過濾容器:
$ docker run -l foo=bar alpine sh -c 'echo 1'
1
$ docker run -l foo=baz alpine sh -c 'echo 1'
1
$ docker ps -aqf 'label=foo=bar'
d43aa7d7c854