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

使用Docker Compose时服务间通信异常问题求助

Docker Compose容器间通信失败:getaddrinfo ENOTFOUND web_backend

以下是针对你遇到问题的排查方向和解决方案:

1. 确认Compose默认网络状态

Docker Compose会自动为项目创建一个桥接网络,服务名可直接作为Hostname解析。先检查网络是否正常:

# 查看当前所有Docker网络
docker network ls
# 找到对应项目的_default网络(比如项目名为myapp,网络名是myapp_default),检查容器是否在网内
docker network inspect 你的项目名_default

如果网络异常,先清理现有环境再重启:

docker-compose down
docker-compose up --build

2. 解决depends_on的局限性

depends_on仅保证后端容器启动顺序,不保证后端服务完全就绪(比如Django还未完成初始化)。前端构建时调用后端,可能服务还未启动完成,导致解析/连接失败。

方案A:添加健康检查依赖

给后端配置健康检查,让前端等待后端服务就绪:
修改docker-compose.yml:

services:
  web_frontend:
    # ...其他配置
    depends_on:
      web_backend:
        condition: service_healthy

  web_backend:
    # ...其他配置
    healthcheck:
      # 替换为后端实际的健康检查接口,无接口可改用`nc -zv localhost 8000`
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 5s
      timeout: 5s
      retries: 5

方案B:添加启动等待脚本

在前端容器中加入等待脚本,确保后端服务可用后再执行构建:

  1. 在前端项目根目录创建wait-for-it.sh:
#!/bin/bash
target_host="$1"
shift
until curl -s "$target_host" > /dev/null; do
  echo "Waiting for $target_host to be ready..."
  sleep 2
done
exec "$@"
  1. 修改前端Dockerfile_nextjs:
COPY wait-for-it.sh /wait-for-it.sh
RUN chmod +x /wait-for-it.sh
# 替换为你的实际构建命令
CMD ["/wait-for-it.sh", "web_backend:8000", "--", "npm", "run", "build"]

3. 确认构建阶段的网络环境

如果前端构建是在docker build阶段执行(而非容器启动后),此时容器未加入Compose服务网络,无法解析web_backend:

  • 检查Dockerfile_nextjs,若存在RUN npm run build,则构建过程在镜像构建阶段执行,不属于Compose网络。
  • 解决方案:将构建步骤移到容器启动时(用CMD而非RUN),或者构建时改用本地可访问的后端地址(比如http://host.docker.internal:8000,仅适用于Docker Desktop)。

4. 手动指定服务网络(可选)

手动定义网络可避免默认网络的潜在问题,修改docker-compose.yml:

services:
  web_frontend:
    # ...其他配置
    networks:
      - app-network

  web_backend:
    # ...其他配置
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

内容的提问来源于stack exchange,提问作者Rodrigo Valle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 11:42:55