Peta dunia

 

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: 10
db tunjuk Healthy dulu. Baru api dan web hidup. Transkrip Docker: $ docker compose up -d [+] up 5/5 ✔ Network kedai-kancil_default Created 0.1s ✔ Volume kedai-kancil_db-data Created 0.0s ✔ Container kedai-kancil-db-1 Healthy 0.3s ✔ Container kedai-kancil-api-1 Started 0.3s ✔ Container kedai-kancil-web-1 Started 0.3s

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.

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
    Tunggu
  • api
    build: ./api
    Tunggu
  • db
    postgres:18-alpine
    Tunggu

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: {}

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

  1. docker compose up -d
  2. docker compose ps
  3. docker compose up -d --wait

0 daripada 3 langkah siap · Tanda anda disimpan.