我已经从 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