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

多Docker Compose部署:前端无法解析后端容器域名求助

解决Docker容器间网络域名解析失败(getaddrinfo EAI_AGAIN)问题

问题原因

你遇到的getaddrinfo EAI_AGAIN my-app-nginx错误,本质是前后端容器不在同一个Docker网络中:

  • 你手动创建了internal-network外部网络,后端docker-compose.yml中声明该网络为external: true,所以后端容器会加入这个预先创建的网络。
  • 但前端docker-compose.yml中重新定义了internal-network(指定driver: bridge和name),这会导致Docker为前端项目创建一个同名但独立的新网络,前后端容器处于隔离网络,自然无法通过容器名互相解析。

解决方案

1. 修改前端docker-compose.yml的网络配置

将前端的网络配置改为和后端一致,声明使用已存在的外部网络,而非重新创建:

version: '3.9'
services:
  nextjs:
    build:
      ...
    container_name: my-app-nextjs
    restart: always
    ports:
      - 3000:3000
    networks:
      - internal-network
networks:
  internal-network:
    external: true

2. 重新部署前端服务

执行以下步骤确保网络和容器状态正确:

  • 进入前端目录,停止并移除当前前端容器:
    docker-compose down
    
  • 确认外部网络存在(不存在则重新创建):
    # 检查网络列表
    docker network ls
    # 若没有internal-network则创建
    docker network create internal-network
    
  • 重启后端容器(确保后端在目标网络中):
    cd ../backend && docker-compose up -d
    
  • 启动前端容器:
    docker-compose up -d
    

3. 验证连通性

进入前端容器,尝试ping后端容器名,确认解析正常:

docker exec -it my-app-nextjs ping my-app-nginx

补充说明

  • 容器间通信使用容器名/服务名即可,无需映射到主机的端口(比如前端请求用http://my-app-nginx/wp-json/v1/enpoint即可,若Nginx内部监听80端口,无需指定8080,除非你的Nginx配置将API路由到了8080端口)。
  • 多个docker-compose项目共享同一个外部网络时,所有容器都能通过服务名/容器名互相访问,这是Docker跨项目网络通信的标准方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:35:23