Bagaimana cara memeriksa apakah mesin buruh pelabuhan dan kontainer buruh pelabuhan sedang berjalan?

109

Dalam sebuah skrip, saya perlu memeriksa:

a) Apakah mesin buruh pelabuhan bekerja?
b) Diberikan nama kontainer, apakah kontainer buruh pelabuhan itu berjalan?

[Kata-kata awal dari pertanyaan ini ambigu, beberapa orang menafsirkannya sebagai "periksa mesin buruh pelabuhan", dan yang lainnya sebagai "periksa kontainer buruh pelabuhan"]

pengguna5517392
sumber
5
Perintah buruh pelabuhan apa pun (kecuali buruh pelabuhan -v), seperti buruh pelabuhan ps
Glen Pierce
docker attach containerName
Dinosaurus Mattia
2
atau coba docker ps
Dinosaurus Mattia
2
sudo systemctl status buruh pelabuhan
Duk
1
docker ps----- Perintah ini hanya akan menampilkan RUNNING container
Suhaib

Jawaban:

116

Jika Anda mencari wadah tertentu, Anda dapat menjalankan:

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

Untuk menghindari masalah dengan penampung yang berada dalam loop kemacetan dan terus-menerus memulai ulang agar tidak muncul, hal di atas dapat diperbaiki dengan memeriksa Statusbidang:

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

Jika Anda ingin tahu apakah dockerd berjalan sendiri di komputer lokal dan Anda telah menginstal systemd, Anda dapat menjalankan:

systemctl show --property ActiveState docker

Anda juga dapat terhubung ke buruh pelabuhan dengan docker infoatau docker versiondan mereka akan error jika daemon tidak tersedia.

BMitch
sumber
bagaimana Anda menempatkan di docker inspect …dalam ifpernyataan dari skrip bash?
François Romain
15
if [ $(docker inspect -f '{{.State.Running}}' $container_name) = "true" ]; then echo yup; else echo nope; fi
BMitch
2
Saya menggunakan docker inspect -f '{{.State.Restarting}}' $container_namesejak saya memulai penampung saya dengan kebijakan mulai ulang, meskipun di sini "benar" adalah yang ingin Anda hindari.
stav meir
4
Baik bash dan buruh pelabuhan akan mengeluh atas ifpernyataan di atas , saat penampung tidak berjalan. Ini menyembunyikan muntahan yang tidak diinginkan untuk kasus palsu: if [ "$(docker inspect -f '{{.State.Running}}' ${container_name} 2>/dev/null)" = "true" ]; then echo yup; else echo nope; fi
Trevor
1
@MarcoLackovic terdengar seperti Anda melewatkan bagian "Anda telah menginstal systemd" di atas.
BMitch
53

Saya akhirnya menggunakan

docker info

untuk memeriksa dengan skrip bash jika mesin buruh pelabuhan sedang berjalan.

randomcontrol
sumber
6
Jawaban ini diremehkan. Ini lintas platform dan lolos / gagal dengan cepat.
Andy Fleming
2
docker info > /dev/null 2>&1jika Anda tidak membutuhkan keluaran
buggymcbugfix
24

Anda dapat memeriksa status buruh pelabuhan menggunakan: systemctl is-active docker

➜  ~  systemctl is-active docker
active

Anda dapat menggunakannya sebagai:

➜  ~  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
sumber
Ini tidak menjawab pertanyaan itu. "untuk memeriksa dengan nama kontainer"
jens.klose
ya sepertinya pertanyaannya ambigu, untuk memeriksa apakah kontainer sedang berjalan Anda harus menggunakan docker ps --filter name=pattern, maka Anda dapat memformat keluaran untuk memeriksa hanya status menambahkan bendera ini:--format {{.Status}}
Hernan Garcia
18

Cantumkan semua penampung:

docker container ls -a

ls= daftar
-a= semua

Periksa kolom "status"

Senio Caires
sumber
1
Itulah yang saya butuhkan, karena berfungsi di setiap platform !!
Rolljee
mudah dan sederhana ... BEKERJA.
RMati
16

Untuk pengguna OS X (Mojave 10.14.3)

Inilah yang saya gunakan dalam skrip Bash saya untuk menguji apakah Docker berjalan atau tidak

# 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
sumber
1
Saya melakukan refaktorisasi ini untuk menghapus if [[ $? -ne 0 ]]antipattern.
tripleee
13

Perintah buruh pelabuhan apa pun (kecuali docker -v), seperti docker ps Jika Docker sedang berjalan, Anda akan mendapatkan beberapa respons yang valid, jika tidak, Anda akan mendapatkan pesan yang menyertakan "Apakah daemon buruh pelabuhan Anda aktif dan berjalan?"

Anda juga dapat memeriksa pengelola tugas Anda.

Glen Pierce
sumber
10

Terkadang Anda tidak tahu nama penampung lengkapnya, dalam hal ini inilah yang berhasil untuk saya:

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

Kami mencantumkan semua proses kontainer yang sedang berjalan ( docker ps -aakan menunjukkan kepada kami juga tidak menjalankan yang berjalan, tapi itu bukan yang saya butuhkan), kami mencari kata tertentu ( grepbagian) dan gagal jika kami tidak menemukan setidaknya satu wadah yang berjalan yang namanya berisi kami kata kunci.

Emilia Tyl
sumber
Refactored untuk menghapus koleksi besar antipattern pemrograman shell.
tripleee
5

Anda dapat memeriksa dengan perintah ini systemctl status dockeritu akan menunjukkan status buruh pelabuhan tersebut. Jika Anda ingin memulai, Anda dapat menggunakan systemctl start dockeralih-alih systemctlAnda dapat mencoba juga dengan service, service docker statusdan service docker startmasing - masing.

Naanii
sumber
5
Jawaban ini mengasumsikan pengguna akhir menggunakan systemdsebagai init mereka.
Rafael
systemctl status dockermenunjukkan dengan benar apakah layanan buruh pelabuhan sedang berjalan. Terima kasih.
imsrgadich
4

Anda juga dapat memeriksa apakah kontainer buruh pelabuhan tertentu sedang berjalan atau tidak menggunakan perintah berikut:

docker inspect postgres | grep "Running"

Perintah ini akan memeriksa apakah misalnya container postgres saya sedang berjalan atau tidak dan akan mengembalikan output sebagai "Running": true

Semoga ini membantu.

Rajusekhar Alle
sumber
Inilah yang saya cari. Dan itu berhasil. (Ada baiknya ketika orang-orang yang memilih tidak setuju mengatakan mengapa, sehingga para pemula dapat mempelajari etiket SO yang lebih baik. :))
allenjom
Saya tidak menolak, tetapi "Kesalahan: Tidak ada objek seperti itu: postgres"
ged
3

Lari:

docker version

Jika buruh pelabuhan sedang berjalan Anda akan melihat:

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

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

Jika buruh pelabuhan tidak berjalan, Anda akan melihat:

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

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

docker ps -a

Anda dapat melihat semua kontainer buruh pelabuhan apakah masih hidup atau sudah mati.

kimmy
sumber
1

di Mac Anda mungkin melihat gambar:

masukkan deskripsi gambar di sini

jika Anda mengklik kanan pada ikon buruh pelabuhan maka Anda akan melihat:

masukkan deskripsi gambar di sini

kalau tidak:

docker ps

dan

docker run hello-world

David Odhiambo
sumber
1

Jalankan perintah ini di terminal:

docker ps

Jika buruh pelabuhan tidak berjalan, Anda akan mendapatkan pesan ini:

Respons kesalahan dari daemon: panggil unix docker.raw.sock: sambungkan: koneksi ditolak

yasir hasan
sumber
0

Bagaimana saya memeriksa di SSH. Jalankan:

systemctl

Jika respons: Gagal mendapatkan koneksi D-Bus: Operasi tidak diizinkan

Ini adalah buruh pelabuhan atau wadah WSL.

Sachin Verma
sumber
0

Untuk jawaban atas pertanyaan pertama Anda, lihat jawaban ini - https://stackoverflow.com/a/65447848/4691279

Untuk pertanyaan kedua Anda - Anda dapat menggunakan perintah seperti docker ps --filter "name=<<<YOUR_CONTAINER_NAME>>>"untuk memeriksa apakah wadah tertentu sedang berjalan atau tidak.

  • Jika Docker dan Container sama-sama berjalan maka Anda akan mendapatkan output seperti di bawah ini:

    $ docker ps --filter "name=nostalgic_stallman"
    
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES       
    9b6247364a03        busybox             "top"               2 minutes ago       Up 2 minutes                            nostalgic_stallman
    
  • Jika Docker tidak berjalan maka Anda akan mendapatkan pesan kesalahan yang mengatakan daemon docker tidak berjalan.

  • Jika Docker berjalan tetapi Container tidak berjalan maka Anda tidak akan mendapatkan nama container di output dari perintah ini.

hagrawal
sumber