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

Docker环境下Next.js调用Strapi API出现ECONNREFUSED错误求助

解决方案

问题根源

Docker容器里的localhost指向容器自身,而非宿主机或其他容器。你在Next.js中请求http://localhost:1337,实际是在前端容器内部访问1337端口,而Strapi后端运行在独立的容器中,因此会触发连接拒绝错误。


1. 修改API请求地址

把Next.js代码里的请求地址从localhost:1337替换为Docker Compose中后端服务的名称backend:1337(Docker会自动将服务名解析为对应容器的IP):

export async function getStaticProps() {
  const res = await fetch('http://backend:1337/api/posts')
  const data = await res.json()

  return {
    props: { data },
  }
}

2. 确保Strapi监听所有网络接口

默认情况下Strapi可能只监听127.0.0.1,导致其他容器无法访问。需要修改Strapi配置,让它绑定到0.0.0.0:

  • 在Strapi的.env文件中添加:
HOST=0.0.0.0
PORT=1337
  • 或者修改config/server.js(或config/server.ts):
module.exports = ({ env }) => ({
  host: env('HOST', '0.0.0.0'),
  port: env.int('PORT', 1337),
  app: {
    keys: env.array('APP_KEYS'),
  },
});

3. 处理容器启动顺序(可选但推荐)

depends_on仅保证后端容器先启动,不保证Strapi服务完全就绪。可以给后端添加健康检查,确保服务可用后再启动前端:

修改docker-compose.yml:

version: '3.8'
services:
  backend:
    container_name: backend
    build:
      context: backend
      dockerfile: .docker/dev.dockerfile
    image: backend:latest
    env_file: ./backend/.env
    volumes:
      - strapi_data:/usr/local/backend/strapi/.tmp
      - strapi_upload:/usr/local/backend/strapi/public/uploads
    ports:
      - '1337:1337'
    # 添加健康检查
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:1337/_health"]
      interval: 10s
      timeout: 5s
      retries: 5
  frontend:
    container_name: frontend
    build:
      context: frontend
      dockerfile: .docker/dev.dockerfile
    image: frontend:latest
    env_file: ./frontend/.env
    volumes:
      - node_modules_next:/usr/local/frontend/node_modules
      - next_folder:/usr/local/frontend
    ports:
      - '3000:3000'
    depends_on:
      # 等待后端健康检查通过
      backend:
        condition: service_healthy
volumes:
  node_modules_next:
  next_folder:
  strapi_data:
  strapi_upload:

4. 验证CORS配置

你的CORS配置已经允许所有源,开发环境下无需调整。如果后续生产部署,建议将origin设置为具体的前端域名(比如https://your-frontend-domain.com)以提升安全性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:05:25