Docker
Container verwalten
Suche…
Syntax
- docker rm [OPTIONEN] CONTAINER [CONTAINER ...]
- Docker anhängen [OPTIONEN] CONTAINER
- docker exec [OPTIONEN] CONTAINER BEFEHL [ARG ...]
- Docker ps [OPTIONEN]
- Andockprotokolle [OPTIONEN] CONTAINER
- Docker inspizieren [OPTIONEN] CONTAINER | IMAGE [CONTAINER | IMAGE ...]
Bemerkungen
- Wenn in den obigen Beispielen Container ein Parameter des
<CONTAINER_NAME>
ist, wird er als<container>
odercontainer id
oder<CONTAINER_NAME>
. In allen diesen Bereichen können Sie entweder einen Containernamen oder eine Container-ID übergeben, um einen Container anzugeben.
Container auflisten
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
docker ps
druckt allein nur die aktuell ausgeführten Container. Verwenden Sie zum Anzeigen aller Container (einschließlich der angehaltenen) das Flag -a
:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago berserk_wozniak
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
Verwenden Sie zum -f
Containern mit einem bestimmten Status die Befehlszeilenoption -f
, um die Ergebnisse zu filtern. Hier ein Beispiel für die Auflistung aller Container, die beendet wurden:
$ docker ps -a -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago
Es ist auch möglich, nur die Container-IDs mit der -q
. Dies macht es sehr einfach, das Ergebnis mit anderen Unix-Dienstprogrammen (wie grep
und awk
) zu awk
:
$ docker ps -aq
9cc69f11a0f7
2bc9b1988080
817879be2230
Wenn Sie einen Container mit docker run --name mycontainer1
, geben Sie einen bestimmten Namen und nicht einen zufälligen Namen (in der Form mood_famous, z. B. nostalgic_stallman) an. Mit einem solchen Befehl können Sie diese leicht finden
docker ps -f name=mycontainer1
Container referenzieren
Docker-Befehle, die den Namen eines Containers annehmen, akzeptieren drei verschiedene Formen:
Art | Beispiel |
---|---|
Volle UUID | 9cc69f11a0f76073e87f25cb6eaf0e079fbfbd1bc47c063bcd25ed3722a8cc4a |
Kurze UUID | 9cc69f11a0f7 |
Name | berserk_wozniak |
Verwenden Sie docker ps
, um diese Werte für die Container in Ihrem System anzuzeigen.
Die UUID wird von Docker generiert und kann nicht geändert werden. Sie können dem Container einen Namen geben, wenn Sie ihn docker run --name <given name> <image>
. Docker generiert einen zufälligen Namen für den Container, wenn Sie beim Starten des Containers keinen Namen angeben.
HINWEIS : Der Wert der UUID (oder einer "kurzen" UUID) kann beliebig lang sein, solange der angegebene Wert für einen Container eindeutig ist
Behälter starten und stoppen
So stoppen Sie einen laufenden Container:
docker stop <container> [<container>...]
Dadurch wird der Hauptprozess im Container ein SIGTERM gesendet, gefolgt von einem SIGKILL, wenn er nicht innerhalb der Kulanzzeit stoppt. Der Name jedes Containers wird beim Stoppen gedruckt.
So starten Sie einen Container, der gestoppt ist:
docker start <container> [<container>...]
Dadurch wird jeder im Hintergrund übergebene Container gestartet. Der Name jedes Containers wird beim Start gedruckt. Um den Container im Vordergrund zu starten, übergeben Sie die --attach
-a
( --attach
).
Listen Sie Container mit benutzerdefiniertem Format auf
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Status}}'
Einen bestimmten Container finden
docker ps --filter name=myapp_1
Container-IP suchen
Um die IP-Adresse Ihres Containers herauszufinden, verwenden Sie:
docker inspect <container id> | grep IPAddress
oder Docker inspizieren
docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}
Docker-Container neu starten
docker restart <container> [<container>...]
Option --time : Sekunden bis zum Anhalten des Containers (Standardeinstellung 10)
docker restart <container> --time 10
Container entfernen, löschen und bereinigen
docker rm
kann verwendet werden, um bestimmte Container wie docker rm
zu entfernen:
docker rm <container name or id>
Um alle Container zu entfernen, können Sie diesen Ausdruck verwenden:
docker rm $(docker ps -qa)
Standardmäßig löscht das Andockfenster einen laufenden Container nicht. Jeder laufende Container erzeugt eine Warnmeldung und wird nicht gelöscht. Alle anderen Container werden gelöscht.
Alternativ können Sie xargs
:
docker ps -aq -f status=exited | xargs -r docker rm
Wo docker ps -aq -f status=exited
wird, wird eine Liste der Container-IDs von Containern mit dem Status "Exited" zurückgegeben.
Warnung: Bei allen obigen Beispielen werden nur "angehaltene" Container entfernt.
Um einen Container zu entfernen, unabhängig davon, ob er gestoppt ist oder nicht, können Sie das Force-Flag -f
:
docker rm -f <container name or id>
So entfernen Sie alle Container unabhängig vom Status:
docker rm -f $(docker ps -qa)
Wenn Sie nur Container entfernen möchten, deren Status " dead
" ist:
docker rm $(docker ps --all -q -f status=dead)
Wenn Sie nur Container mit einem exited
Status entfernen möchten:
docker rm $(docker ps --all -q -f status=exited)
Dies sind alle Permutationen von Filtern, die beim Auflisten von Containern verwendet werden .
Um sowohl unerwünschte Container als auch baumelnde Images zu entfernen, die nach Version 1.3 Speicherplatz verwenden, verwenden Sie Folgendes (ähnlich dem Unix-Tool df
):
$ docker system df
So entfernen Sie alle nicht verwendeten Daten:
$ docker system prune
Führen Sie den Befehl für einen bereits vorhandenen Docker-Container aus
docker exec -it <container id> /bin/bash
Es ist üblich, sich in einem bereits laufenden Container anzumelden, um ein paar schnelle Tests durchzuführen oder zu sehen, was die Anwendung macht. Häufig wird darauf hingewiesen, dass die Verwendung von Containern aufgrund von Protokollen schlecht ist und geänderte Dateien in Volumes abgelegt werden sollten. In diesem Beispiel können wir uns im Container anmelden. Dies setzt voraus, dass / bin / bash im Container verfügbar ist. Dies kann / bin / sh oder etwas anderes sein.
docker exec <container id> tar -czvf /tmp/backup.tgz /data
docker cp <container id>:/tmp/backup.tgz .
Dieses Beispiel archiviert den Inhalt des Datenverzeichnisses in einem tar. Dann können Sie es mit docker cp
abrufen.
Containerprotokolle
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
-f, --follow=false Follow log output
--help=false Print usage
--since= Show logs since timestamp
-t, --timestamps=false Show timestamps
--tail=all Number of lines to show from the end of the logs
Zum Beispiel:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
ff9716dda6cb nginx "nginx -g 'daemon off" 8 days ago Up 22 hours 443/tcp, 0.0.0.0:8080->80/tcp
$ docker logs ff9716dda6cb
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
Stellen Sie eine Verbindung zu einer Instanz her, die als Daemon ausgeführt wird
Es gibt zwei Möglichkeiten, dies zu erreichen, die erste und bekannteste ist die Folgende:
docker attach --sig-proxy=false <container>
Dieses fügt Ihre Bash buchstäblich an den Container Bash an, dh wenn Sie ein Skript ausführen, sehen Sie das Ergebnis.
Geben Sie zum Lösen einfach ein: Ctl-P Ctl-Q
Wenn Sie jedoch eine freundlichere Methode benötigen, um neue Bash-Instanzen erstellen zu können, führen Sie einfach den folgenden Befehl aus:
docker exec -it <container> bash
Datei von / in Container kopieren
vom Container zum Host
docker cp CONTAINER_NAME:PATH_IN_CONTAINER PATH_IN_HOST
vom Host zum Container
docker cp PATH_IN_HOST CONTAINER_NAME:PATH_IN_CONTAINER
Wenn ich jess / send aus benutze
https://hub.docker.com/r/jess/transmission/builds/bsn7eqxrkzrhxazcuytbmzp/
befinden sich die Dateien im Container in / transmission / download
und mein aktuelles Verzeichnis auf dem Host ist / home / $ USER / abc nach
docker cp transmission_id_or_name:/transmission/download .
Ich werde die Dateien kopieren lassen
/home/$USER/abc/transmission/download
Sie können nicht mit docker cp
nur eine Datei kopieren, Sie kopieren den Verzeichnisbaum und die Dateien
Docker-Volumes entfernen, löschen und bereinigen
Docker-Volumes werden nicht automatisch entfernt, wenn ein Container angehalten wird. So entfernen Sie zugeordnete Volumes beim Stoppen eines Containers:
docker rm -v <container id or name>
Wenn das Flag -v
nicht angegeben ist, verbleibt das Volume als 'hängendes Volume' auf der Festplatte. So löschen Sie alle baumelnden Datenträger:
docker volume rm $(docker volume ls -qf dangling=true)
Der docker volume ls -qf dangling=true
Filter gibt eine Liste der docker volume ls -qf dangling=true
Namen zurück, einschließlich nicht gekennzeichneter, die nicht an einen Container angehängt sind.
Alternativ können Sie xargs
:
docker volume ls -f dangling=true -q | xargs --no-run-if-empty docker volume rm
Exportieren und Importieren von Docker-Container-Dateisystemen
Es ist möglich, den Dateisysteminhalt eines Docker-Containers in einer Tarball-Archivdatei zu speichern. Dies ist praktisch, wenn Sie Container-Dateisysteme auf andere Hosts verschieben möchten, z. B. wenn ein Datenbankcontainer wichtige Änderungen enthält und die Änderungen an anderer Stelle nicht repliziert werden können. Beachten Sie, dass es vorzuziehen ist, einen vollständig neuen Container aus einem aktualisierten Image mithilfe eines docker run
oder einer docker-compose.yml
Datei zu erstellen, anstatt das Dateisystem eines Containers zu exportieren und zu verschieben. Ein Teil von Dockers Macht ist die Überprüfbarkeit und Verantwortlichkeit seines deklarativen Stils zum Erstellen von Images und Containern. Durch den docker export
und den docker import
wird diese Leistung durch die Verschleierung von Änderungen im Dateisystem eines Containers gegenüber dem ursprünglichen Zustand beeinträchtigt.
docker export -o redis.tar redis
Der obige Befehl erstellt ein leeres Image und exportiert dann das Dateisystem des redis
Containers in dieses leere Image. Verwenden Sie zum Importieren aus einem Tarball-Archiv:
docker import ./redis.tar redis-imported:3.0.7
Mit diesem Befehl wird das redis-imported:3.0.7
Image erstellt, aus dem Container erstellt werden können. Es ist auch möglich, Änderungen beim Import anzulegen und eine Commit-Nachricht festzulegen:
docker import -c="ENV DEBUG true" -m="enable debug mode" ./redis.tar redis-changed
Die Dockerfile-Direktiven, die für die Verwendung der Befehlszeilenoption -c
verfügbar sind, sind CMD
, ENTRYPOINT
, ENV
, EXPOSE
, ONBUILD
, USER
, VOLUME
, WORKDIR
.