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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:22:19