Docker Compose中React前端与Flask后端容器连接被拒绝求助
解决方案:Docker容器间React前端无法连接Flask后端的问题
以下是针对你遇到的连接被拒绝问题的分步排查和解决方法:
1. 修正Flask应用的监听地址
Flask默认仅监听127.0.0.1(容器内部回环地址),这会导致同Docker网络内的其他容器无法访问。必须修改app.py中的启动代码,让Flask监听容器的所有网络接口:
# app.py from flask import Flask, jsonify app = Flask(__name__) @app.route('/get_data') def get_data(): return jsonify({"message": "Hello from Flask"}) if __name__ == '__main__': # 关键:设置host为0.0.0.0,允许外部容器访问 app.run(host='0.0.0.0', port=5000, debug=True)
2. 验证后端Dockerfile配置
确保后端Dockerfile正确暴露端口并使用正确的启动命令:
# 后端Dockerfile示例 FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY app.py . # 暴露容器内的5000端口 EXPOSE 5000 # 启动Flask应用(确保命令指向正确的启动文件) CMD ["python", "app.py"]
如果使用Gunicorn作为WSGI服务器,启动命令需绑定0.0.0.0:5000:
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
3. 确认Docker Compose的网络与服务配置
确保docker-compose.yml中两个服务处于同一网络(默认docker-compose会创建共享网络),且后端服务名称为backend(与前端容器中curl的地址一致):
# docker-compose.yml示例 version: '3.8' services: backend: build: ./backend ports: - "5000:5000" # 宿主机端口:容器端口映射(可选,用于宿主机测试) # 无需手动指定网络,默认加入项目默认网络 frontend: build: ./frontend ports: - "3000:3000" # 前端容器与后端容器自动处于同一网络,可通过服务名访问
4. 检查后端容器的运行状态
执行以下命令查看后端容器是否正常启动:
# 查看容器状态 docker-compose ps # 查看后端日志,排查启动错误 docker-compose logs backend
如果日志显示Flask启动失败(如依赖缺失、端口冲突),需先解决这些问题。
5. 容器间通信的额外验证
如果以上配置都正确,可进入后端容器验证端口监听情况:
# 进入后端容器 docker-compose exec backend bash # 检查端口5000是否被监听 netstat -tulpn | grep 5000
输出应显示0.0.0.0:5000被Python或Gunicorn进程占用,说明监听配置正确。
内容的提问来源于stack exchange,提问作者Lukas Pavez
相关产品推荐
相关产品推荐

