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"]
docker attach containerName
docker ps
docker ps
----- Perintah ini hanya akan menampilkan RUNNING containerJawaban:
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
Status
bidang: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:
Anda juga dapat terhubung ke buruh pelabuhan dengan
docker info
ataudocker version
dan mereka akan error jika daemon tidak tersedia.sumber
docker inspect …
dalamif
pernyataan dari skrip bash?if [ $(docker inspect -f '{{.State.Running}}' $container_name) = "true" ]; then echo yup; else echo nope; fi
docker inspect -f '{{.State.Restarting}}' $container_name
sejak saya memulai penampung saya dengan kebijakan mulai ulang, meskipun di sini "benar" adalah yang ingin Anda hindari.if
pernyataan 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
Saya akhirnya menggunakan
untuk memeriksa dengan skrip bash jika mesin buruh pelabuhan sedang berjalan.
sumber
docker info > /dev/null 2>&1
jika Anda tidak membutuhkan keluaranAnda dapat memeriksa status buruh pelabuhan menggunakan:
systemctl is-active docker
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 *
sumber
docker ps --filter name=pattern
, maka Anda dapat memformat keluaran untuk memeriksa hanya status menambahkan bendera ini:--format {{.Status}}
Cantumkan semua penampung:
docker container ls -a
ls
= daftar-a
= semuaPeriksa kolom "status"
sumber
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
sumber
if [[ $? -ne 0 ]]
antipattern.Perintah buruh pelabuhan apa pun (kecuali
docker -v
), sepertidocker 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.
sumber
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 -a
akan menunjukkan kepada kami juga tidak menjalankan yang berjalan, tapi itu bukan yang saya butuhkan), kami mencari kata tertentu (grep
bagian) dan gagal jika kami tidak menemukan setidaknya satu wadah yang berjalan yang namanya berisi kami kata kunci.sumber
Anda dapat memeriksa dengan perintah ini
systemctl status docker
itu akan menunjukkan status buruh pelabuhan tersebut. Jika Anda ingin memulai, Anda dapat menggunakansystemctl start docker
alih-alihsystemctl
Anda dapat mencoba juga denganservice
,service docker status
danservice docker start
masing - masing.sumber
systemd
sebagai init mereka.systemctl status docker
menunjukkan dengan benar apakah layanan buruh pelabuhan sedang berjalan. Terima kasih.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.
sumber
Lari:
Jika buruh pelabuhan sedang berjalan Anda akan melihat:
Jika buruh pelabuhan tidak berjalan, Anda akan melihat:
sumber
Jika tujuan dasarnya adalah "Bagaimana cara memulai container saat Docker dimulai?"
Kita bisa menggunakan kebijakan restart Docker
Untuk menambahkan kebijakan mulai ulang ke penampung yang sudah ada:
Docker: Tambahkan kebijakan mulai ulang ke penampung yang sudah dibuat
Contoh:
sumber
docker ps -a
Anda dapat melihat semua kontainer buruh pelabuhan apakah masih hidup atau sudah mati.
sumber
di Mac Anda mungkin melihat gambar:
jika Anda mengklik kanan pada ikon buruh pelabuhan maka Anda akan melihat:
kalau tidak:
docker ps
dan
docker run hello-world
sumber
Jalankan perintah ini di terminal:
Jika buruh pelabuhan tidak berjalan, Anda akan mendapatkan pesan ini:
sumber
Bagaimana saya memeriksa di SSH. Jalankan:
Jika respons: Gagal mendapatkan koneksi D-Bus: Operasi tidak diizinkan
Ini adalah buruh pelabuhan atau wadah WSL.
sumber
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.
sumber