Wie finde ich den Docker-Namen/Hash, damit er exportiert werden kann?

Wie finde ich den Docker-Namen/Hash, damit er exportiert werden kann?

Ich habe einen Docker-Container aus einem Dockerscript erstellt, zB

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

Und ich kann es ausführen, indem ich den angegebenen Image-Namen verwende, also 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

Aber um es zu exportieren, muss ich den Commit-Hash verwenden:

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

Ich habe versucht, den Containernamen anstelle des Hashs zu verwenden, aber es wird ein Fehler ausgegeben:

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

Die Frage ist:

  1. Gibt es eine Möglichkeit, den neuesten Commit-Hash des Containers herauszufinden, der zum Exportieren des Containers als .tarDatei erforderlich ist?

  2. Ist es ohne den neuesten Commit-Hash möglich, den Container als Datei zu exportieren .tar? Und wenn ja, wie?

Antwort1

Der ubu.imagevon Ihnen verwendete Bildname und nicht der Containername ist, Sie können ihn also nicht als Argument verwenden docker export.

Wenn Sie den Containernamen kennen, können Sie ihn direkt zum Exportieren verwenden:

docker export <container name>

oder seinen Hash abrufen:

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

Ohne Containernamen können Sie die gesamte Liste der Container mit dem angegebenen Image-Namen abrufen:

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

Beachten Sie, dass alle aus dem angegebenen Image erstellten Container zurückgegeben werden.


Ein besserer Ansatz besteht darin, einen eigenen Container einzurichten label, sodass Sie ihn zum Filtern des Containers verwenden können:

$ 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

verwandte Informationen