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

Docker-Compose本地正常,AWS EC2部署前后端连接失败求助

问题:EC2上Docker-Compose部署前后端,前端无法连接后端(net::ERR_CONNECTION_REFUSED)

我是Web开发新手,本地用docker-compose成功构建Web应用,但在AWS EC2 Linux实例上部署后,前端能公网访问,却无法从后端获取数据,报错net::ERR_CONNECTION_REFUSED,前后端连接中断。疑惑本地可用的docker-compose.yaml为何在EC2上失效,求解决建议。

Docker-Compose.yaml:

Version: "3.2"
services:
  project:
    restart: always
    container_name: coin
    command : bash -c "python manage.py runserver 0.0.0.0:8000"
    build:
      context: ./coin_api/
      dockerfile: dockerfile
    ports:
      - "8000:8000"
  frontend:
    restart: always
    command : npm start
    container_name: front
    build:
      context: ./frontend/
      dockerfile: dockerfile
    ports:
      - "3000:3000" 
    stdin_open: true
networks:
  db-net:
    driver: bridge

EC2实例安全组:
EC2安全组配置


解决建议

  • 修正Docker-Compose网络配置:你的yaml定义了db-net网络,但两个服务都没指定加入该网络。显式绑定网络能确保前后端容器在同一网络内,可通过服务名直接通信。修改后的服务配置如下:

    services:
      project:
        # 原有配置不变
        networks:
          - db-net
      frontend:
        # 原有配置不变
        networks:
          - db-net
    
  • 调整前端后端请求地址:

    • 若前端是浏览器公网访问:不能用localhost:8000,必须换成EC2的公网IP/绑定域名加:8000,比如http://你的EC2公网IP:8000/api/接口路径
    • 若前端是容器内部调用后端:直接用服务名project:8000,同一网络内Docker会自动解析服务名到对应容器IP
  • 确认EC2安全组开放8000端口:检查安全组是否允许TCP 8000端口的外部访问(比如设置源为0.0.0.0/0或你的公网IP),否则公网请求后端会被拦截。

  • 检查EC2系统防火墙:部分Linux实例自带firewalld,需确保8000端口放行:

    sudo firewall-cmd --permanent --add-port=8000/tcp
    sudo firewall-cmd --reload
    
  • 验证后端容器状态:登录EC2执行以下命令排查:

    • docker-compose ps:确认coin容器处于Up状态
    • docker logs coin:查看后端服务日志,确认是否正常启动在0.0.0.0:8000

内容的提问来源于stack exchange,提问作者Eric.P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:54:23