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”]


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.


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.


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 *

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”


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


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ń.


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.


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.


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.


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


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


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.


0

docker ps -a

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.