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

Docker部署Flask应用仅能通过内部IP访问,localhost无法访问求助

Flask应用Docker部署后本地访问失败问题解决

问题描述

我为学习Docker与docker-compose搭建了一个简单的Flask应用。运行容器后,期望能通过http://127.0.0.1:5001访问应用,但实际上仅能通过Docker内部IP地址http://172.18.0.2:5001访问。

相关日志与配置

容器运行日志

web  |  * Running on all addresses (0.0.0.0)
web  |  * Running on http://127.0.0.1:5001
web  |  * Running on http://172.18.0.2:5001
web  | Press CTRL+C to quit
web  |  * Restarting with stat
web  |  * Debugger is active!
web  |  * Debugger PIN: 359-467-367

docker-compose.yaml配置

version: '3.8'

services:
  web:
    build: ./services/web
    container_name: web
    command: python manage.py run -h 0.0.0.0
    volumes:
      - ./services/web/:/usr/src/app/
    ports:
      - 5001:5000
    environment:
      - FLASK_APP=project/__init__.py
      - FLASK_DEBUG=1
      - FLASK_RUN_PORT=5001

Dockerfile配置

FROM python:3.11.3-slim-buster

WORKDIR /usr/src/app

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt

COPY . /usr/src/app/

Flask应用入口代码(init.py)

from flask import Flask, jsonify


app = Flask(__name__)


@app.route("/")
def hello_world():
    return jsonify(hello="world")

问题原因与解决方法

核心问题

容器内的Flask服务实际运行在5001端口(由环境变量FLASK_RUN_PORT=5001指定),但docker-compose的端口映射配置是5001:5000——将主机的5001端口转发到容器的5000端口,两者端口不匹配,导致本地请求无法命中容器内的服务端口。

解决方式二选一:

  1. 修改端口映射配置:将docker-compose.yaml中的ports改为5001:5001,让主机5001端口直接转发到容器内服务运行的5001端口:

    ports:
      - 5001:5001
    
  2. 统一服务运行端口:移除环境变量FLASK_RUN_PORT=5001,让Flask默认运行在5000端口,保持现有端口映射5001:5000不变:

    environment:
      - FLASK_APP=project/__init__.py
      - FLASK_DEBUG=1
    

修改完成后,重新启动容器:

docker-compose down && docker-compose up --build

此时访问http://127.0.0.1:5001即可正常获取响应。

内容的提问来源于stack exchange,提问作者user5967613

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:35:05