Como encontrar o nome/hash do docker para que ele possa ser exportado?

Como encontrar o nome/hash do docker para que ele possa ser exportado?

Eu construí um contêiner docker a partir de um dockerscript, por exemplo

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

E posso executá-lo usando o nome da imagem que forneci, ou seja 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

Mas para exportá-lo eu tenho que usar o hash de commit:

user@servername:~$ docker export c00379445b9d > ubu.image.tar

Tentei usar o nome do contêiner em vez do hash, mas ocorreu um erro:

$ docker export ubu.image > ubu.image.tar
Error response from daemon: No such container: ubu.image

A questão é:

  1. Existe uma maneira de descobrir o hash de commit mais recente do contêiner necessário para exportá-lo como um .tararquivo?

  2. Sem o hash de commit mais recente, é possível exportar o contêiner como .tararquivo? É assim, como?

Responder1

O ubu.imageque você usou é o nome da imagem, não o nome do contêiner, portanto você não pode usá-lo no argumento para docker export.

Se você souber o nome do contêiner, poderá usá-lo diretamente para exportar:

docker export <container name>

ou obtendo seu hash:

docker ps -aqf 'name=<container name>'

Sem o nome do contêiner, você pode obter todas as listas de contêineres com o nome de imagem fornecido:

docker ps -aqf 'ancestor=<image name>'

Cuidado, pois ele retornará todos os contêineres construídos a partir da imagem fornecida.


Uma abordagem melhor é definir seu próprio contêiner label, para que você possa usá-lo para filtrar o contêiner:

$ 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

informação relacionada