Jak sprawdzić, czy silnik platformy docker i kontener docker są uruchomione?

103

W skrypcie muszę sprawdzić:

a) Czy silnik Dockera działa?
b) Biorąc pod uwagę nazwę kontenera, czy ten kontener Docker działa?

[początkowe sformułowanie tego pytania było niejednoznaczne, niektórzy interpretują je jako „sprawdź silnik dokera”, a inni jako „sprawdź kontener dockera”]

user5517392
źródło
4
Dowolne polecenie docker (z wyjątkiem docker -v), takie jak docker ps
Glen Pierce
docker attach containerName
Mattia Dinosaur
1
lub spróbuj docker ps
Mattia Dinosaur
2
sudo systemctl status docker
Duk,
docker ps----- To polecenie pokaże tylko
BIEŻĄCE

Odpowiedzi:

109

Jeśli szukasz konkretnego kontenera, możesz uruchomić:

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

Aby uniknąć problemów z kontenerem, który jest w pętli awaryjnej i ciągle uruchamia się ponownie po pokazaniu, że jest gotowy, powyższe można poprawić, zaznaczając Statuspole:

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

Jeśli chcesz wiedzieć, czy dockerd działa sam na komputerze lokalnym i masz zainstalowany systemd, możesz uruchomić:

systemctl show --property ActiveState docker

Możesz także połączyć się z dockerem za pomocą docker infolub, docker versiona jeśli demon jest niedostępny, zostanie wyświetlony błąd.

BMitch
źródło
jak umieściłbyś docker inspect …wewnątrz ifoświadczenie skryptu bash?
François Romain
15
if [ $(docker inspect -f '{{.State.Running}}' $container_name) = "true" ]; then echo yup; else echo nope; fi
BMitch,
2
Używam, docker inspect -f '{{.State.Restarting}}' $container_nameponieważ zaczynam mój kontener z zasadą ponownego uruchamiania, chociaż tutaj „prawda” jest tym, czego chcesz uniknąć.
stav meir
4
Zarówno bash, jak i docker będą narzekać na powyższe ifstwierdzenie, gdy kontener nie jest uruchomiony. To ukrywa niechciane wyrzucenie z fałszywej sprawy: if [ "$(docker inspect -f '{{.State.Running}}' ${container_name} 2>/dev/null)" = "true" ]; then echo yup; else echo nope; fi
Trevor
1
@MarcoLackovic brzmi tak, jakbyś przegapił powyższą część „masz zainstalowany systemd”.
BMitch
48

Skończyło się na używaniu

docker info

aby sprawdzić skryptem bash, czy silnik Dockera jest uruchomiony.

randomcontrol
źródło
6
Ta odpowiedź jest niedoceniana. Jest wieloplatformowy i szybko przechodzi / zawiesza.
Andy Fleming
2
docker info > /dev/null 2>&1jeśli nie potrzebujesz wyjścia
buggymcbugfix
22

możesz sprawdzić stan dockera używając: systemctl is-active docker

➜  ~  systemctl is-active docker
active

możesz go używać jako:

➜  ~  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
źródło
To nie odpowiada na pytanie. „do sprawdzenia z nazwą kontenera”
jens.klose
tak, wygląda na to, że pytanie jest niejednoznaczne, aby sprawdzić, czy kontener jest uruchomiony, należy użyć docker ps --filter name=pattern, a następnie można sformatować dane wyjściowe, aby sprawdzić tylko stan, dodając tę ​​flagę:--format {{.Status}}
Hernan Garcia
16

Wyświetl wszystkie kontenery:

docker container ls -a

ls= lista
-a= wszystko

Sprawdź kolumnę „stan”

Senio Caires
źródło
1
Właśnie tego potrzebowałem, ponieważ działa na wszystkich platformach !!
Rolljee
łatwe i proste ... PRACOWANE.
RMati
15

Dla użytkowników OS X (Mojave 10.14.3)

Oto, czego używam w moim skrypcie Bash, aby sprawdzić, czy Docker działa, czy nie

# Check if docker is running
if ! docker info >/dev/null 2>&1; then
    echo "Docker does not seem to be running, run it first and retry"
    exit 1
fi
Lapin
źródło
10

Dowolne polecenie dockera (oprócz docker -v), takie jakdocker ps Jeśli Docker jest uruchomiony, otrzymasz prawidłową odpowiedź, w przeciwnym razie otrzymasz komunikat zawierający „Czy Twój demon Dockera jest uruchomiony i działa?”

Możesz również sprawdzić swojego menedżera zadań.

Glen Pierce
źródło
9

Czasami nie znasz pełnej nazwy kontenera, w tym przypadku zadziałało to:

if docker ps | grep -q keyword
then 
    echo "Running!"
else
    echo "Not running!"
    exit 1
fi

Wymieniamy wszystkie uruchomione procesy kontenera ( docker ps -apokazałby nam również niedziałające, ale nie tego potrzebowałem), szukamy określonego słowa ( grepczęści) i po prostu nie udaje nam się, jeśli nie znaleźliśmy co najmniej jednego działającego kontenera, którego nazwa zawiera nasze słowo kluczowe.

Emilia Tyl
źródło
Przebudowano, aby usunąć ogromną kolekcję antywzorów programowania powłoki.
tripleee
5

Możesz sprawdzić za pomocą tego polecenia systemctl status docker, pokaże status dockera. Jeśli chcesz rozpocząć można użyć systemctl start dockerzamiast systemctlmożna spróbować także service, service docker statusi service docker startodpowiednio.

Naanii
źródło
5
Ta odpowiedź zakłada, że ​​użytkownik końcowy używa systemdich jako inicjatora.
Rafael
systemctl status dockerpoprawnie pokaż, czy usługa docker jest uruchomiona. Dziękuję Ci.
imsrgadich
4

Możesz również sprawdzić, czy dany kontener docker jest uruchomiony, czy nie, używając następującego polecenia:

docker inspect postgres | grep "Running"

To polecenie sprawdzi, czy na przykład mój kontener postgres działa, czy nie, i zwróci wynik jako „Running”: true

Mam nadzieję że to pomoże.

Rajusekhar Alle
źródło
To jest dokładnie to, czego szukałem. I to działa. (To dobrze, kiedy ludzie, którzy uznali coś powiedzieć, dlaczego w dół, tak noobs może lepiej uczyć SO etykiety :).)
allenjom
Nie głosowałem przeciw, ale „Błąd: nie ma takiego obiektu: postgres”
ged
3

Biegać:

docker version

Jeśli docker jest uruchomiony , zobaczysz:

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

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

Jeśli docker nie jest uruchomiony , zobaczysz:

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

Error response from daemon: Bad response from Docker engine
Marco Lackovic
źródło
1

na komputerze Mac możesz zobaczyć obraz:

wprowadź opis obrazu tutaj

jeśli klikniesz prawym przyciskiem myszy ikonę Dockera, zobaczysz:

wprowadź opis obrazu tutaj

alternatywnie:

docker ps

i

docker run hello-world

David Odhiambo
źródło
0

Jak mogę sprawdzić w SSH.Run:

systemctl

Jeśli odpowiedź: Nie udało się uzyskać połączenia D-Bus: Operacja niedozwolona

Jest to docker lub kontener WSL.

Sachin Verma
źródło
0

docker ps -a

Możesz zobaczyć wszystkie kontenery docker, niezależnie od tego, czy są żywe, czy martwe.

Ykimmy
źródło