You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动态创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:52:46