version: '3.8' services: api: build: context: . dockerfile: Dockerfile image: life-echo-api:latest container_name: life-echo-api-prod ports: - "8000:8000" # 环境变量文件(优先级:env_file > 镜像中的 .env) # 如果 .env.prod 不存在,容器会使用构建时打包的 .env 文件 env_file: - .env.prod volumes: # 持久化数据库文件(确保数据库文件在容器重启后保留) # 数据库文件默认在 /app/life_echo.db,挂载到宿主机以持久化 - ./life_echo.db:/app/life_echo.db # 如果需要将数据库存储在 data 目录,可以在 .env 中设置 DATABASE_URL=sqlite+aiosqlite:///./data/life_echo.db # 然后取消下面的注释并注释掉上面的挂载 # - ./data:/app/data restart: always # 健康检查(使用 Python 内置库,无需额外依赖) healthcheck: test: ["CMD", "python", "-c", "import http.client; conn = http.client.HTTPConnection('localhost', 8000); conn.request('GET', '/health'); r = conn.getresponse(); exit(0 if r.status == 200 else 1)"] interval: 30s timeout: 10s retries: 3 start_period: 10s networks: - life-echo-network # 日志配置(生产环境推荐) logging: driver: "json-file" options: max-size: "10m" max-file: "3" # 注意:deploy 配置仅在 Docker Swarm 模式下有效 # 如果使用 docker-compose up(非 swarm 模式),资源限制需要使用 ulimits 或其他方式 # 如需资源限制,建议使用 docker run 的 --memory 和 --cpus 参数,或使用 docker-compose 的 ulimits networks: life-echo-network: driver: bridge