
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 é:
Existe uma maneira de descobrir o hash de commit mais recente do contêiner necessário para exportá-lo como um
.tar
arquivo?Sem o hash de commit mais recente, é possível exportar o contêiner como
.tar
arquivo? É assim, como?
Responder1
O ubu.image
que 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