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

本地正常运行的Flask应用容器化后无法访问问题

问题描述

我有一个Flask应用,本地执行flask run可正常运行,但Docker部署后Mac设备无法访问,其他设备能正常运行。

项目结构

flask-demo
│   Dockerfile
│   requirements.txt   
│   start.sh
└───app
    │   __init__.py
    │   other-extensions.py
    │
    └───microservice-folders
    │   │   ...
    └───templates   
    │   │   ...

关键文件内容

1. app/init.py

# imports

def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    # manage login
    # ...

    # Initialize Flask extensions here
    # ...

    bs = Bootstrap(app) # flask-bootstrap

    # Register blueprints here
    # ...

    return app

2. Dockerfile

FROM python:3.9

WORKDIR /python-docker

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .

CMD ["flask", "run", "--host=0.0.0.0"]

3. start.sh

#!/bin/zsh
app="docker.test"
docker build -t ${app} .
docker run -d -p 56733:80 \
  --name=${app} \
  -v $PWD:/app ${app}

现象

  • 执行zsh start.sh后容器成功启动,docker ps输出:
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS         PORTS                   NAMES
40c6b6dfca3a   docker.test   "flask run --host=0.…"   5 seconds ago   Up 3 seconds   0.0.0.0:56733->80/tcp   docker.test
  • 访问http://localhost:56733时Safari提示“无法打开页面,连接已断开”
  • 修改端口映射为-p 8080:5000后,页面空白
  • 非Mac设备拉取项目可正常运行,Mac设备不行

排查与解决步骤

1. 确认容器内Flask监听端口

Flask默认监听5000端口,你的Docker命令未指定端口,容器内服务实际跑在5000端口,之前的56733:80映射错误。进入容器验证:

docker exec -it docker.test bash
# 容器内执行
netstat -tulpn | grep python
# 正常会显示0.0.0.0:5000

2. 修正端口映射

修改start.sh的端口映射为-p 56733:5000,或直接执行:

docker run -d -p 56733:5000 --name docker.test docker.test

3. 更换本地端口尝试

Mac上可能原端口被占用,换个端口测试:

docker run -d -p 8080:5000 --name docker.test docker.test

访问http://localhost:8080

4. 使用Mac内网IP访问

Mac的localhost偶尔会有映射问题,用内网IP替代:

  • 终端执行ipconfig getifaddr en0获取内网IP
  • 访问http://[你的内网IP]:8080

5. 查看容器日志排查启动问题

docker logs docker.test

如果看到* Running on http://0.0.0.0:5000说明Flask启动正常;若有依赖缺失、蓝图注册失败等报错,对应修复。

6. 检查Mac防火墙设置

临时关闭防火墙测试:

  • 系统设置 → 网络 → 防火墙 → 关闭
    若能访问,再将Docker添加到防火墙例外列表。

7. 确认Docker Desktop网络设置

打开Docker Desktop → 设置 → 资源 → 网络,确保“允许Docker从本地网络访问”已勾选。

内容的提问来源于stack exchange,提问作者ai.jennetta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:07:57