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

Docker部署Flask应用启动后无法访问连接问题求助

问题根因

你的配置存在3个核心错误,导致容器内服务无法被正常访问:

  • 未做端口映射:Dockerfile中的EXPOSE 5000仅为端口声明,不会自动将容器端口转发到宿主机,启动时不指定映射规则的话,宿主机网络无法触达容器内的5000端口。
  • CMD指令写法错误:当前CMD ["python", "./simpleflask.py", "./main.py"]的写法,会把./main.py作为命令行参数传入simpleflask.py,Python解释器只会执行第一个脚本,不会自动运行第二个文件。且容器主进程应为Flask Web服务,测试脚本不应和服务启动命令绑定。
  • 客户端请求地址错误:0.0.0.0是服务端绑定的监听地址,不能作为客户端的请求目标地址,本地访问时应使用127.0.0.1。
修复方案

按以下步骤调整配置即可正常访问:

  1. 修正Dockerfile,建议使用绝对路径设置工作目录,启动命令仅保留Flask服务启动逻辑,修正后内容如下:
    FROM python:3.8
    WORKDIR /app
    COPY . /app
    RUN pip install --upgrade pip
    RUN pip install -r requirements.txt
    EXPOSE 5000
    CMD ["python", "simpleflask.py"]
    
  2. 重新构建镜像,在项目根目录执行命令:
    docker build -t simple-flask:v1 .
    
  3. 启动容器时添加端口映射参数,将容器5000端口映射到宿主机5000端口:
    docker run -d -p 5000:5000 simple-flask:v1
    
  4. (可选)如果需要在宿主机运行main.py测试接口,修改文件内的请求地址:
    import requests
    
    # 把0.0.0.0替换为本地回环地址127.0.0.1
    url = 'http://127.0.0.1:5000/'
    myobj = {'number': 22}
    mysecobj = {'number': 11}
    
    data = requests.post(url, json=(myobj, mysecobj))
    print(data.text)
    

完成以上操作后,浏览器访问http://127.0.0.1:5000即可看到接口返回,执行python main.py也能正常拿到求和结果。

补充:如果需要容器启动后自动执行测试脚本,不要直接把两个py文件传给Python解释器,可以编写简单的shell启动脚本,先启动Flask服务等待端口就绪后再执行请求逻辑,常规使用场景下容器保持Web服务作为主进程常驻即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:15:32