Docker Compose启动报错引用未定义test-wp-network网络问题排查
问题现象
- 编写的
docker-compose.yml初始配置如下:
version: "3.9" services: result: image: result ports: - "8080:80" networks: - test-wp-network
- 已提前手动创建目标网络,执行
docker network list | grep test可查询到对应网络存在:
a18a8c7a2764 test-wp-network bridge local
- 执行
docker-compose up启动服务时抛出如下错误:
service "db" refers to undefined network test-wp-network: invalid compose project
- 补充验证:直接通过
docker run命令指定该网络启动容器可正常运行,无异常:
docker run --name=db -e POSTGRES_PASSWORD=mysecretpassword --network=test-wp-network postgres:9.4
问题原因
- Docker Compose有固定的配置校验规则:所有被服务引用的网络,必须在配置文件的顶级
networks块中显式声明。初始配置仅在服务段引用了test-wp-network,没有做顶级声明,Compose无法识别该网络的配置属性。 - 手动提前创建的
test-wp-network属于脱离当前Compose项目生命周期管理的外部资源,Compose默认不会直接复用这类已存在的外部网络,必须显式标记才会读取使用。 - 报错提及的
service "db"不在贴出的配置片段中,说明执行docker-compose up时加载的完整配置包含db服务(常见原因是同目录存在docker-compose.override.yml等自动加载的覆盖配置,或是贴配置时遗漏了db服务段),该服务同样引用了未声明的test-wp-network,最终触发报错。
docker run可以正常使用该网络是因为该命令直接与Docker daemon交互,不存在Compose的配置校验、项目资源隔离逻辑,因此可以直接关联已存在的网络。
修复步骤
- 先排查执行命令所在目录的所有Compose配置文件(包括主配置、自动加载的覆盖配置、手动指定的其他配置文件),确认db服务的配置内容,确保所有需要接入
test-wp-network的服务配置正确。 - 在Compose配置的顶级层级添加
networks配置块,声明test-wp-network为外部已存在的网络,修改后的配置参考如下:
version: "3.9" services: result: image: result ports: - "8080:80" networks: - test-wp-network # 补全db服务配置参考 # db: # image: postgres:9.4 # environment: # POSTGRES_PASSWORD: mysecretpassword # networks: # - test-wp-network networks: test-wp-network: external: true
- 配置保存完成后,重新执行
docker-compose up即可正常启动服务。
内容的提问来源于stack exchange,提问作者Linux Memory
相关产品推荐
相关产品推荐

