version: '3.8' services: postgres: # 使用自定义 Dockerfile 构建(基于官方镜像) build: context: ./postgres dockerfile: Dockerfile image: st-postgres:18.1-pgvector container_name: st-postgres restart: unless-stopped ports: - "5432:5432" environment: # 数据库配置 POSTGRES_DB: st_dev POSTGRES_USER: st_user POSTGRES_PASSWORD: st_password # PostgreSQL 配置 POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C" # 时区设置 TZ: Asia/Shanghai PGTZ: Asia/Shanghai volumes: # 数据持久化 - postgres_data:/var/lib/postgresql/data # 初始化脚本 - ./postgres/init.sql:/docker-entrypoint-initdb.d/01-init.sql:ro # PostgreSQL 配置文件(可选) - ./postgres/postgresql.conf:/etc/postgresql/postgresql.conf:ro command: > postgres -c shared_preload_libraries=vector -c max_connections=200 -c shared_buffers=256MB -c effective_cache_size=1GB -c maintenance_work_mem=128MB -c checkpoint_completion_target=0.9 -c wal_buffers=16MB -c default_statistics_target=100 -c random_page_cost=1.1 -c effective_io_concurrency=200 -c work_mem=5242kB -c huge_pages=off -c min_wal_size=1GB -c max_wal_size=4GB healthcheck: test: ["CMD-SHELL", "pg_isready -U st_user -d st_dev"] interval: 10s timeout: 5s retries: 5 networks: - st-network # pgAdmin - PostgreSQL Web 管理界面(可选) pgadmin: image: dpage/pgadmin4:latest container_name: st-pgadmin restart: unless-stopped ports: - "5050:80" environment: PGADMIN_DEFAULT_EMAIL: admin@st.local PGADMIN_DEFAULT_PASSWORD: admin123 PGADMIN_CONFIG_SERVER_MODE: 'False' PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: 'False' volumes: - pgadmin_data:/var/lib/pgadmin depends_on: postgres: condition: service_healthy networks: - st-network volumes: postgres_data: driver: local name: st-postgres-data pgadmin_data: driver: local name: st-pgadmin-data networks: st-network: driver: bridge name: st-network