动态创建Docker网络关联Compose服务时遇网络未定义错误求助
问题解决:Docker Compose 服务引用未定义网络错误
错误原因
你遇到的service "cache" refers to undefined network project_1728932200_network: invalid compose project错误,根源是Docker Compose配置中未显式声明你引用的外部网络:
- 你的
docker-compose.yml仅将default网络设为外部网络(对应${NETWORK_NAME}),但每个服务的networks字段直接引用${NETWORK_NAME},而这个网络并未在Compose的networks块中定义。 - Compose无法识别未在自身配置中声明的网络名称,即使你已经通过脚本创建了它。
修复方案
方案1:利用默认网络简化配置
既然你已经将default网络设置为外部的${NETWORK_NAME},服务默认会加入default网络,因此可以直接移除每个服务中的networks字段:
修改后的docker-compose.yml:
version: "3.7" networks: default: external: name: ${NETWORK_NAME} services: runner: container_name: runner-${PROJECT_NAME} build: context: . target: production volumes: - ./:/app - /app/node_modules - /host/path/to/files:/app/files tty: true stdin_open: true depends_on: - cache ports: - "${DYNAMIC_PORT}:8000" environment: - FILE_BASE_PATH=/app/files - TERM=xterm command: node dist/index.js queue_worker: container_name: queue_worker-${PROJECT_NAME} build: context: . target: production volumes: - ./:/app - /app/node_modules - /host/path/to/files:/app/files depends_on: - cache command: node dist/Service.QueueWorker/index.js cache: image: redis:6.2-alpine restart: always ports: - "${REDIS_PORT}:6379" command: redis-server --save 20 1 --loglevel warning volumes: - "${CACHE_VOLUME_NAME}:/data"
方案2:显式声明外部网络
如果你希望保留服务中networks字段的显式引用,需要在Compose的networks块中声明${NETWORK_NAME}为外部网络:
修改后的docker-compose.yml:
version: "3.7" networks: ${NETWORK_NAME}: external: true services: runner: container_name: runner-${PROJECT_NAME} build: context: . target: production volumes: - ./:/app - /app/node_modules - /host/path/to/files:/app/files tty: true stdin_open: true depends_on: - cache ports: - "${DYNAMIC_PORT}:8000" networks: - "${NETWORK_NAME}" environment: - FILE_BASE_PATH=/app/files - TERM=xterm command: node dist/index.js queue_worker: container_name: queue_worker-${PROJECT_NAME} build: context: . target: production volumes: - ./:/app - /app/node_modules - /host/path/to/files:/app/files depends_on: - cache networks: - "${NETWORK_NAME}" command: node dist/Service.QueueWorker/index.js cache: image: redis:6.2-alpine restart: always ports: - "${REDIS_PORT}:6379" networks: - "${NETWORK_NAME}" command: redis-server --save 20 1 --loglevel warning volumes: - "${CACHE_VOLUME_NAME}:/data"
额外注意事项
- 你的Bash脚本中使用了
docker-compose -f docker-compose.instance.yml up,但提供的配置文件名为docker-compose.yml,请确保文件名一致,或修改脚本中的文件名参数。 - 脚本中创建网络的命令
docker network create -d bridge "$NETWORK_NAME"无需修改,保持即可。
内容的提问来源于stack exchange,提问作者Sanniv Choudhuri
相关产品推荐
相关产品推荐

