EN: Read in English
Dunia D4: Set Hidangan
Tunggu sihat: depends_on
Anda akan belajar: buat satu hidangan tunggu sampai yang lain betul-betul sedia.
Teks BM belum disemak oleh penutur asli.
Disemak dengan Docker Engine 29 pada 31 Okt 2026
Masalahnya
Ketik setiap titik pada garis masa.
Waktu sibuk pagi. API hidup terlalu awal. Ia panggil pangkalan data yang masih baru bangun. Ketik setiap saat.
Tengok
web:
depends_on: [api]
api:
depends_on: [db]Yang hidup dulu di atas. Susun ikut turutan. Guna anak panah, atau seret.
- web
- db
- api
depends_on: Siapa tunggu siapa. Dengan condition: service_healthy, satu hidangan tunggu sampai yang lain lulus health check. (bergantung pada) tetapkan urutan mula. Satu hidangan hidup selepas hidangan yang ia perlukan. Susun urutan mula dengan betul.
Tengok
api:
depends_on:
db:
condition: service_healthy
db:
image: postgres:18-alpine
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]
interval: 2s
retries: 10Laptop anda~/kedai-kancil
- Tiada tingkap terbuka
Bekas (container)
- Belum ada container
Pek beku (image)
- kedai-kancil-api:latest6 layer · 244MB
- kedai-kancil-web:latest9 layer · 92.6MB
- nginx:1.30-alpine8 layer · 93.5MB
- node:24-alpine4 layer · 244MB
- postgres:18-alpine9 layer · 433MB
- redis:8-alpine7 layer · 162MB
0 container (0 berjalan), 6 image, 0 loker.
Hidup belum tentu sedia. Health check ialah ujian rasa. pg_isready tanya db: dah sedia? service_healthy buat api tunggu jawapan ya.
Cuba
Sekarang api tunggu sampai db hidup sahaja. Buat ia tunggu sampai db sihat. Kemudian pesan set hidangan.
Bina set makanan: tambah service, kemudian sambung talian telefon dan loker.
Menu (tekan atau seret)
Set makanan anda
- web
build: ./web - api
build: ./api - db
postgres:18-alpine
compose.yaml 27 baris
services: web: build: ./web ports: - "8080:80" depends_on: api: condition: service_started api: build: ./api environment: DB_HOST: db depends_on: db: condition: service_started db: image: postgres:18-alpine environment: POSTGRES_PASSWORD: example volumes: - db-data:/var/lib/postgresql healthcheck: test: ["CMD", "pg_isready", "-U", "postgres"] interval: 2s retries: 10 volumes: db-data: {}
Petunjuk
Buka senarai “Tunggu” api. Pilih sihat untuk db.Teka
Seseorang padam kata laluan db. Postgres terus keluar. Apa docker compose up -d buat sekarang?
Pilih satu jawapan.
Semak
Jalankan dan baca baris merah. Kemudian tanya log db kenapa.
Laptop anda~/kedai-kancil
- Tiada tingkap terbuka
Bekas (container)
- Belum ada container
Pek beku (image)
- kedai-kancil-api:latest6 layer · 244MB
- kedai-kancil-web:latest9 layer · 92.6MB
- nginx:1.30-alpine8 layer · 93.5MB
- node:24-alpine4 layer · 244MB
- postgres:18-alpine9 layer · 433MB
- redis:8-alpine7 layer · 162MB
0 container (0 berjalan), 6 image, 0 loker.
Kata sebenar: dependency failed to start. Maksudnya: db berhenti, jadi hidangan yang menunggunya tak pernah hidup.
Anda berjaya!
Kini anda boleh buat satu hidangan tunggu sampai yang lain sihat.
Nak tahu lebih (pilihan)
Tiga syarat: service_started (bentuk senarai pendek), service_healthy, dan service_completed_successfully untuk kerja sekali jalan, contohnya buat jadual. Tambah restart: true dan Compose juga mula semula api selepas ia mula semula db. docker compose up -d --wait hanya kembali bila setiap hidangan hidup atau sihat. CI guna ini.
Misi sebenar
docker compose up -ddocker compose psdocker compose up -d --wait
0 daripada 3 langkah siap · Tanda anda disimpan.
English
Morning rush. The API starts too early. It calls a database that is still waking up. Tap each moment.
web:
depends_on: [api]
api:
depends_on: [db]depends_on sets the start order. A dish starts after the dishes it depends on. Put the start order right.
api:
depends_on:
db:
condition: service_healthy
db:
image: postgres:18-alpine
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]
interval: 2s
retries: 10Started is not ready. A health check is a taste test. pg_isready asks db: ready yet? service_healthy makes api wait for a yes.
Right now api waits only until db has started. Make it wait until db is healthy. Then order the set meal.
Someone deleted db’s password. Postgres exits at once. What does docker compose up -d do now?
Run it and read the red line. Then ask db’s logs why.
Real words: dependency failed to start. Plain words: db stopped, so the dishes waiting for it never started.
You can now make a dish wait until another is healthy.
Anda dah siapkan ini. Latihan lagi pun bagus!
Dokumentasi rasmi: Control startup order · Compose file reference: depends_on · Compose file reference: healthcheck
Anda dah belajar 25 minit. Rehat sekejap bantu otak anda.
Pecutan selesai! Fokus yang hebat. Regangkan badan seminit?