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

1

Eu criei 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 eu forneci, por exemplo, 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 exportar eu tenho que usar o hash de commit:

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

Eu tentei usar o nome do contêiner em vez do hash, mas ele gera 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 mais recente hash de confirmação do contêiner necessário para exportar o contêiner como um arquivo .tar ?

  2. Sem o último hash de confirmação, é possível exportar o contêiner como .tar file? É assim, como?

por alvas 07.04.2017 / 11:09

1 resposta

2

O ubu.image que você usou é o nome da imagem, não o nome do contêiner, portanto, não é possível 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 recebendo 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 da imagem:

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

Tenha em atenção que irá devolver todos os contentores construídos a partir da imagem em questão.

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
    
por 07.04.2017 / 11:31