
Я создал контейнер 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
Вопрос в том:
Есть ли способ узнать последний хэш коммита контейнера, необходимый для экспорта контейнера в виде
.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