db: image: postgres:15 container_name: app_db environment: POSTGRES_USER: ${DB_USER:-postgres} POSTGRES_DB: ${DB_NAME:-app_db} POSTGRES_PASSWORD: ${DB_PASSWORD:-password} healthcheck: test: [ "CMD-SHELL", "pg_isready -d ${DB_NAME:-app_db} -U ${DB_USER:-postgres}" ] interval: 10s timeout: 5s retries: 5 restart: unless-stopped networks: - app_network volumes: - app_postgres_data:/var/lib/postgresql/data - type: bind source: ./database_init # 假設你的初始化腳本放在專案根目錄下的 database_init 資料夾 target: /docker-entrypoint-initdb.d consistency: cached command: > bash -c ' if command -v apt-get >/dev/null 2>&1; then apt-get update && apt-get install -y dos2unix elif command -v apk >/dev/null 2>&1; then apk add --no-cache dos2unix fi && find /docker-entrypoint-initdb.d -type f -name "*.sh" -exec sh -c '\'' dos2unix "{}" 2>/dev/null || true chmod +x "{}" '\'' \; && exec docker-entrypoint.sh postgres ' volumes: app_postgres_data: # 定義給 PostgreSQL 數據用的 volume networks: app_network: # 定義給服務串接用的網路