如何找到 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

相关内容