services: api: build: context: . dockerfile: docker/api.Dockerfile image: api:0.1.0 container_name: api-dev working_dir: /app volumes: - ./server:/app/server - ./src:/app/src - ./saves:/app/saves - ${MODEL_DIR:-./models}:/models # 使用默认值处理未定义的环境变量 deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] ports: - "5050:5050" networks: - app-network extra_hosts: - "host.docker.internal:host-gateway" environment: - NEO4J_URI=bolt://graph:7687 - NEO4J_USERNAME=${NEO4J_USERNAME:-neo4j} - NEO4J_PASSWORD=${NEO4J_PASSWORD:-0123456789} - MILVUS_URI=http://milvus:19530 - MODEL_DIR=/models - RUNNING_IN_DOCKER=true command: uv run uvicorn server.main:app --host 0.0.0.0 --port 5050 --reload restart: unless-stopped web: build: context: . dockerfile: docker/web.Dockerfile target: development image: web:0.1.0 container_name: web-dev volumes: - ./web:/app - /app/node_modules ports: - "5173:5173" depends_on: - api networks: - app-network environment: - NODE_ENV=development - VITE_API_URL=http://api:5050 command: pnpm run server restart: unless-stopped graph: image: neo4j:5.26 container_name: graph-dev ports: - "7474:7474" - "7687:7687" volumes: - ./docker/volumes/neo4j/data:/data - ./docker/volumes/neo4j/logs:/var/lib/neo4j/logs environment: - NEO4J_AUTH=${NEO4J_USERNAME:-neo4j}/${NEO4J_PASSWORD:-0123456789} - NEO4J_server_bolt_listen__address=0.0.0.0:7687 - NEO4J_server_http_listen__address=0.0.0.0:7474 - ENTITY_EMBEDDING=true networks: - app-network restart: unless-stopped etcd: container_name: milvus-etcd-dev image: quay.io/coreos/etcd:v3.5.5 environment: - ETCD_AUTO_COMPACTION_MODE=revision - ETCD_AUTO_COMPACTION_RETENTION=1000 - ETCD_QUOTA_BACKEND_BYTES=4294967296 - ETCD_SNAPSHOT_COUNT=50000 volumes: - ./docker/volumes/milvus/etcd:/etcd command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd healthcheck: test: ["CMD", "etcdctl", "endpoint", "health"] interval: 60s timeout: 30s retries: 5 start_period: 30s networks: - app-network restart: unless-stopped minio: container_name: milvus-minio-dev image: minio/minio:RELEASE.2023-03-20T20-16-18Z environment: MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin} MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin} volumes: - ./docker/volumes/milvus/minio:/minio_data command: minio server /minio_data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 60s timeout: 30s retries: 5 start_period: 30s networks: - app-network restart: unless-stopped milvus: image: milvusdb/milvus:v2.5.6 container_name: milvus-standalone-dev command: ["milvus", "run", "standalone"] security_opt: - seccomp:unconfined environment: ETCD_ENDPOINTS: etcd:2379 MINIO_ADDRESS: minio:9000 MILVUS_LOG_LEVEL: error volumes: - ./docker/volumes/milvus/milvus:/var/lib/milvus - ./docker/volumes/milvus/logs:/var/lib/milvus/logs healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"] interval: 60s start_period: 120s timeout: 30s retries: 5 ports: - "19530:19530" - "9091:9091" depends_on: - "etcd" - "minio" networks: - app-network restart: unless-stopped networks: app-network: driver: bridge