如何找到 docker 名稱/哈希值以便將其導出?

如何找到 docker 名稱/哈希值以便將其導出?

我已經從 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

問題是:

  1. 有沒有辦法找到將容器匯出為.tar文件所需的容器的最新提交雜湊值?

  2. 如果沒有最新的提交哈希,是否可以將容器匯出為.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

相關內容