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实例安全组:
解决建议
修正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
相关产品推荐
相关产品推荐

