Saya menggunakan docker-compose
.
Beberapa perintah suka up -d service_name
atau start service_name
akan segera kembali dan ini sangat berguna jika Anda tidak ingin wadah berjalan tergantung pada keadaan shell, seperti yang mereka lakukan dengan reguler up service_name
. Satu use case menjalankannya dari semacam server integrasi / pengiriman berkelanjutan.
Tetapi cara menjalankan / memulai layanan ini tidak memberikan umpan balik tentang keadaan sebenarnya dari layanan setelahnya.
The Docker Compose CLI referensi untuk up
perintah tidak menyebutkan opsi yang relevan, tapi, seperti untuk versi 1.7.1
, itu adalah saling eksklusif dengan -d
:
--abort-on-container-exit Stops all containers if any container was stopped. *Incompatible with -d.*
Dapatkah saya entah bagaimana secara manual memeriksa bahwa wadah memang berfungsi dan belum berhenti karena beberapa kesalahan?
sumber
docker ps -q -f "status=running" --no-trunc | grep $(docker-compose ps -q <service_name>)
grep ....
bagian tersebut berakhir dengan string kosong.if [ -z `docker-compose ps -q mysql` ] || [ -z `docker ps -q --no-trunc | grep $(docker-compose ps -q mysql)` ]; then
. Apa yang dilakukan adalah: pertama memeriksa apakah layanan ada sama sekali (bahkan jika itu dihentikan) dan bagian kedua memeriksa apakah layanan yang ada benar-benar berjalan. Anda mungkin ingin memasukkan ini dalam contoh Anda untuk pembaca masa depan yang melirik hanya pada jawaban yang diterima. Saya pikir ini berguna.Sedangkan untuk versi
1.7.1
, tidak ada perintah bawaan seperti itu.Sebagai gantinya,
exec
dapat digunakan dengan cara yang sama.Ketika Anda menjalankannya untuk layanan yang memiliki beberapa kontainer itu akan berjalan ok:
Tetapi ketika Anda menjalankannya untuk layanan yang tidak memiliki wadah layanan yang berjalan , itu akan menampilkan kesalahan:
Jadi, dapat digunakan untuk memeriksa, apakah ada wadah "hidup" untuk layanan yang diberikan.
sumber
Anda dapat menjalankan:
Dan Anda akan mendapatkan id wadah jika
service-name
sedang berjalan. Sesuatu seperti:Jika layanan tidak menjalankan output kosong, jadi jika Anda ingin menggunakan ini dalam skrip Anda dapat melakukan sesuatu seperti:
sumber
docker-compose up
Ctrl-C.docker-compose ps
Maka harus menunjukkan bahwa negara kontainer tidak "Atas", tetapidocker-compose ps -q service-name
masih memberi Anda id.Saya memiliki kebutuhan yang sama. Namun, saya punya
restart: always
di lingkungan saya. Jadi agak sulit untuk mendeteksi jika ada sesuatu yang macet dan memulai kembali dalam satu lingkaran.Saya membuat cek Icinga / Nagios untuk membandingkan waktu yang dibuat dan mulai. Mungkin bermanfaat bagi orang lain di telepon:
sumber
Jika Anda menganggap skenario ini:
Anda dapat memeriksa apakah ada wadah berhenti karena kesalahan dengan:
docker ps -a | grep 'Exited (255)'
.Pemeriksaan ini berfungsi dengan benar bahkan dalam kasus kontainer yang diharapkan untuk segera berhenti tanpa kesalahan (yaitu wadah data), karena statusnya (dari
docker ps -a
) ditandai sebagaiExited (0)
.Misalnya, di docker-compose.yml kami, kami memulai wadah kami dengan:
command: sh -c 'node dotenv_check.js && pm2 start --no-daemon src/worker.js --watch'
Untuk php-fpm, kami menggunakan perintah serupa:
The
dotenv_check.js
dandotenv_check.php
skrip yang keluar dengan kode kesalahan dalam kasus variabel env diperlukan hilang.The
set -e
perintah, memberitahu script untuk berhenti pada kesalahan, yang, pada gilirannya, akan segera menghentikan wadah. Tentang set-esumber
Bagaimana dengan ini?
Anda mendaftar proses, pilih garis di mana "Atas" di kolom 4 dan saring untuk kecocokan pada nama layanan.
sumber