So überprüfen Sie, ob Docker ausgeführt wird oder nicht

94

Ich bin neu bei Docker. Ich schreibe ein einfaches Skript für Docker. Ich muss überprüfen, ob Docker ausgeführt wird oder nicht. Gibt es einen Befehl zum Überprüfen mit dem Containernamen?

user5517392
quelle
3
Jeder Docker-Befehl (außer Docker -v), wie Docker ps
Glen Pierce
docker attach containerName
Mattia Dinosaurier
oder versuchen Sie docker ps
Mattia Dinosaur
1
Sudo Systemctl Status Docker
Duk
docker ps----- Dieser Befehl zeigt nur RUNNING Container
Suhaib

Antworten:

97

Wenn Sie nach einem bestimmten Container suchen, können Sie Folgendes ausführen:

if [ "$( docker container inspect -f '{{.State.Running}}' $container_name )" == "true" ]; then ...

Um Probleme mit einem Container zu vermeiden, der sich in einer Absturzschleife befindet und ständig neu gestartet wird, um anzuzeigen, dass er aktiv ist, können Sie Folgendes verbessern, indem Sie das folgende StatusFeld überprüfen :

if [ "$( docker container inspect -f '{{.State.Status}}' $container_name )" == "running" ]; then ...

Wenn Sie wissen möchten, ob dockerd selbst auf dem lokalen Computer ausgeführt wird und systemd installiert ist, können Sie Folgendes ausführen:

systemctl show --property ActiveState docker

Sie können auch mit docker infooder eine Verbindung zum Docker herstellen. docker versionWenn der Dämon nicht verfügbar ist, tritt ein Fehler auf.

BMitch
quelle
Wie würden Sie das docker inspect …Innere einer ifAussage eines Bash-Skripts einfügen?
François Romain
14
if [ $(docker inspect -f '{{.State.Running}}' $container_name) = "true" ]; then echo yup; else echo nope; fi
BMitch
2
Ich verwende, docker inspect -f '{{.State.Restarting}}' $container_nameda ich meinen Container mit einer Neustartrichtlinie starte, obwohl Sie hier "true" vermeiden möchten.
Stav Meir
4
Sowohl Bash als auch Docker beschweren sich über die obige ifAussage, wenn der Container nicht läuft. Dies verbirgt den unerwünschten Spucke für den falschen Fall: if [ "$(docker inspect -f '{{.State.Running}}' ${container_name} 2>/dev/null)" = "true" ]; then echo yup; else echo nope; fi
Trevor
1
@MarcoLackovic klingt so, als hätten Sie den obigen Teil "Sie haben systemd installiert" verpasst.
BMitch
42

Am Ende habe ich verwendet

docker info

um mit einem Bash-Skript zu überprüfen, ob die Docker-Engine ausgeführt wird.

zufällige Kontrolle
quelle
4
Diese Antwort wird unterschätzt. Es ist plattformübergreifend und geht schnell vorbei.
Andy Fleming
docker info > /dev/null 2>&1Wenn Sie die Ausgabe nicht benötigen
Buggymcbugfix
22

Sie können den Docker-Status überprüfen mit: systemctl is-active docker

  ~  systemctl is-active docker
active

Sie können es verwenden als:

  ~  if [ "$(systemctl is-active docker)" = "active" ]; then echo "is alive :)" ; fi
is alive :)

  ~  sudo systemctl stop docker

  ~  if [ "$(systemctl is-active docker)" = "active" ]; then echo "is alive :)" ; fi
 * empty response *
Hernan Garcia
quelle
Dies beantwortet die Frage nicht. "mit Containernamen überprüfen"
jens.klose
Ja, es scheint, dass die Frage nicht eindeutig ist. Um zu überprüfen, ob der Container ausgeführt wird, den Sie verwenden sollten docker ps --filter name=pattern, können Sie die Ausgabe so formatieren, dass nur der Status überprüft wird, der dieses Flag hinzufügt:--format {{.Status}}
Hernan Garcia
15

Alle Container auflisten:

docker container ls -a

ls= Liste
-a= alle

Überprüfen Sie die Spalte "Status"

Senio Caires
quelle
1
Das habe ich gebraucht, weil es auf allen Plattformen funktioniert !!
Rolljee
leicht und einfach ... ARBEITET.
RMati
14

Für OS X-Benutzer (Mojave 10.14.3)

Folgendes verwende ich in meinem Bash-Skript, um zu testen, ob Docker ausgeführt wird oder nicht

# Check if docker is running
docker_state=$(docker info >/dev/null 2>&1)
if [[ $? -ne 0 ]]; then
    echo "Docker does not seem to be running, run it first and retry"
    exit 1
fi
Lapin
quelle
7

Jeder Docker-Befehl (außer docker -v), z. B. docker ps Wenn Docker ausgeführt wird, erhalten Sie eine gültige Antwort. Andernfalls wird die Meldung "Ist Ihr Docker-Daemon aktiv?" Angezeigt.

Sie können auch Ihren Task-Manager überprüfen.

Glen Pierce
quelle
7

Manchmal kennen Sie den vollständigen Containernamen nicht. In diesem Fall hat dies bei mir funktioniert:

if [ $(docker ps | grep keyword | wc -l) -gt 0 ]
then 
    echo "Running!"
else
    echo "Not running!"
    exit 1
fi

Wir listen alle laufenden Containerprozesse auf (Docker ps -a würde uns auch nicht laufende zeigen, aber das habe ich nicht gebraucht), wir suchen nach einem bestimmten Wort (grep part) und zählen einfach die Zeilen des Ergebnisses (wc -l ), wenn es größer als 0 ist, bedeutet dies, dass wir einige laufende Container gefunden haben, deren Namen unser Schlüsselwort enthalten.

Emilia Tyl
quelle
5

Mit diesem Befehl können Sie überprüfen, ob systemctl status dockerder Status des Dockers angezeigt wird. Wenn Sie starten möchten , können Sie verwenden , systemctl start dockeranstatt systemctlSie versuchen können , auch mit service, service docker statusund service docker startjeweils.

Naanii
quelle
5
Diese Antwort setzt voraus, dass der Endbenutzer systemdals Init verwendet.
Rafael
systemctl status dockerRichtig anzeigen ist, dass der Docker-Dienst ausgeführt wird. Danke dir.
Imsrgadich
3

Sie können auch mit dem folgenden Befehl überprüfen, ob ein bestimmter Docker-Container ausgeführt wird oder nicht:

docker inspect postgres | grep "Running"

Dieser Befehl prüft, ob beispielsweise mein Postgres-Container ausgeführt wird oder nicht, und gibt die Ausgabe als "Running" zurück: true

Hoffe das hilft.

Rajusekhar Alle
quelle
Genau das habe ich gesucht. Und es funktioniert. (Es ist gut, wenn Leute, die etwas
ablehnen
Ich wählte nicht nach unten, sondern „Fehler: kein solches Objekt: Postgres“
ged
3

Lauf:

docker version

Wenn Docker ausgeführt wird, sehen Sie:

Client: Docker Engine - Community
 Version:           ...
 [omitted]

Server: Docker Engine - Community
 Engine:
  Version:          ...
 [omitted]

Wenn Docker nicht ausgeführt wird , wird Folgendes angezeigt :

Client: Docker Engine - Community
 Version:           ...
 [omitted]

Error response from daemon: Bad response from Docker engine
Marco Lackovic
quelle
2

Auf einem Mac wird möglicherweise das folgende Bild angezeigt:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie mit der rechten Maustaste auf das Docker-Symbol klicken, sehen Sie:

Geben Sie hier die Bildbeschreibung ein

Alternative:

docker ps

und

docker run hello-world

David Odhiambo
quelle
0

Wie ich in SSH.Run einchecke:

systemctl

Wenn Antwort: D-Bus-Verbindung konnte nicht hergestellt werden: Betrieb nicht zulässig

Es ist ein Docker oder WSL-Container.

Sachin Verma
quelle
0

docker ps -a

Sie können alle Docker-Container sehen, ob sie lebendig oder tot sind.

Ykimmy
quelle