Как найти имя/хэш докера, чтобы его можно было экспортировать?

Как найти имя/хэш докера, чтобы его можно было экспортировать?

Я создал контейнер Docker из скрипта 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

Связанный контент