
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:
Gibt es eine Möglichkeit, den neuesten Commit-Hash des Containers herauszufinden, der zum Exportieren des Containers als
.tar
Datei erforderlich ist?Ist es ohne den neuesten Commit-Hash möglich, den Container als Datei zu exportieren
.tar
? Und wenn ja, wie?
Antwort1
Der ubu.image
von 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