当前位置: 首页 > news >正文

基于Docker的Flask项目部署完整指南

基于Docker的Flask项目部署完整指南

项目结构与文件说明

TextWeb/
├── .dockerignore         # Docker构建忽略配置
├── Dockerfile            # Docker镜像构建文件
├── requirements.txt      # Python依赖清单
└── WebServer/└── main.py           # Flask主程序

核心代码解析

main.py

from flask import Flask, jsonifyapp = Flask(__name__)
@app.route('/', methods=['GET'])
def start_conversation():try:return jsonify({"message": "Hi!!!"})  # 返回JSON格式响应except Exception as e:return jsonify({"error": str(e)}), 500  # 异常处理if __name__ == '__main__':app.run(host='0.0.0.0',    # 允许外部访问port=8099,         # 指定服务端口debug=True,        # 调试模式(生产环境应关闭)use_reloader=False # 禁用自动重载)

requirements解析

flask==3.0.0

Dockerfile解析

FROM python:3.11-slim     # 基础镜像(轻量级Python环境)WORKDIR /app              # 设置容器内工作目录# 依赖安装(优先复制requirements.txt利用缓存)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt  # 安装依赖且不缓存COPY . .                 # 复制项目文件EXPOSE 8099              # 声明暴露端口(需与实际运行时映射端口配合)CMD ["python", "WebServer/main.py"]  # 容器启动命令

.dockerignore说明

# 忽略非必要文件,加速构建过程
venv/                   # 本地虚拟环境
__pycache__/            # Python字节码缓存
.git/                   # 版本控制目录
*.log                   # 日志文件
Dockerfile              # 自身文件(避免递归复制)

完整部署流程

1. 构建Docker镜像

docker build -t textweb-app:1.0 -f Dockerfile .
  • -t textweb-app:1.0:指定镜像名称与标签
  • -f Dockerfile:显式指定Dockerfile路径(默认可省略)
  • .:构建上下文路径(当前目录)

2. 运行容器

docker run -d --name textweb-container -p 8099:8099 textweb-app:1.0
  • -d:后台运行(detached模式)
  • --name:自定义容器名称
  • -p 宿主机端口:容器端口:端口映射绑定

3. 验证服务

curl http://localhost:8099
# 预期输出:{"message":"Hi!!!"}
docker logs -f textweb-container  # 实时查看容器日志

关键名称解析

名称作用域出现位置说明
textweb-app:1.0镜像docker images镜像标识符(名称:标签)
textweb-container容器docker ps运行中的容器实例名称
/app容器内部Docker容器文件系统WORKDIR指定的工作目录

常见问题排查

1. 端口冲突

Error: Port 8099 is already in use

解决方案:修改docker内部8099修改到别的端口如8080

# 查看占用进程
sudo lsof -i :8099# 或修改映射端口
docker run -p 8080:8099 [...]

2. 依赖安装失败

ERROR: Could not find a version that satisfies the requirement flask==3.0.0

处理方法:

  • 检查requirements.txt拼写
  • 确认PyPI源可用性(可添加清华源):
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple [...]

3. 容器启动失败

docker logs textweb-container  # 查看错误日志
# 常见错误:模块导入错误
# 检查文件路径是否正确(确保WebServer目录存在)

4. 镜像体积优化

原始镜像约1GB+,优化建议:

# 使用多阶段构建
FROM python:3.11-slim as builder
# ...安装步骤...FROM python:3.11-alpine  # 最终使用更小基础镜像
COPY --from=builder /app /app

5. 启动成功无法访问

在docker中运行后提示运行成功,但是在局域网内无法访问到服务:

1.检查容器运行状态

查看当前运行的容器:

docker ps
  • 预期输出:
    如果容器正在运行,你会看到类似以下信息(注意 STATUS 为 Up):
    CONTAINER ID   IMAGE              COMMAND           CREATED        STATUS        PORTS                    NAMES
    a1b2c3d4e5f6   textweb-container    "python main.py"  5 minutes ago  Up 5 minutes  0.0.0.0:8099->8099/tcp   textweb-app
    
  • 关键字段:
    • PORTS:确认端口映射是否正确(如 8088->8088)。
    • STATUS:Up 表示容器正在运行。
2.手动进入容器验证

进入容器内部,测试服务连接:

docker exec -it <container_id_or_name> /bin/bashcurl http://localhost:8099

如果访问失败,说明启动错误,需要检查代码或端口冲突。
如果访问成功,继续下面操作。

3.从宿主机访问服务

直接在CMD上运行:

curl http://localhost:8099

可能的问题:

  • 无响应:检查防火墙或安全组是否放行 8088 端口。
  • Connection refused:容器内服务未监听 0.0.0.0(需确保代码中绑定到 0.0.0.0)。
  • docker设置问题:修改配置如下图

在这里插入图片描述

总结

通过Docker部署实现了:

  • 环境隔离:确保开发/生产环境一致性
  • 快速部署:镜像可重复使用
  • 资源控制:通过容器限制资源使用

建议后续改进:

  1. 添加健康检查接口
  2. 配置日志轮转
  3. 设置生产环境配置(关闭debug模式)

相关文章:

  • Bytebase 3.5.1 - 扩展了对数据库的连接参数支持
  • 纯HTMLCSS静态网站——元神
  • 操作指南:vLLM 部署开源大语言模型(LLM)
  • Kafka与Spark-Streaming:大数据处理的黄金搭档
  • [mysql]数据类型精讲
  • 【MySQL】MySQL索引与事务
  • STUN协议 与 TURN协议
  • 广州 3D 展厅开启企业展示新时代​
  • 运维之SSD硬盘(SSD hard Drive for Operation and Maintenance)
  • http://noi.openjudge.cn/——2.5基本算法之搜索——200:Solitaire
  • ISCTF2024-misc(部分)
  • LSPatch官方版:无Root Xposed框架,自由定制手机体验
  • 动态ip与静态ip的概念、区别、应用场景
  • 神经网络基础[损失函数,bp算法,梯度下降算法 ]
  • SpringBoot集成LiteFlow实现轻量级工作流引擎
  • 国内多层PCB供应商优选指南
  • 住宅IP如何选择:长效VS短效,哪个更适合你的业务?
  • ctfshow web入门 命令执行(29-77)
  • Linux 中的文件锁定命令:flock、fcntl、lockfile、flockfile 详细教程
  • ubiquant比赛系列——用docker准备ubipoker开发环境
  • 白酒瓶“神似”北京第一高楼被判侵权,法院一审判赔45万并停售
  • 甘肃省原副省长赵金云被开除公职,甘肃省委表态:坚决拥护党中央决定
  • 内蒙古纪检干部刘占波履新呼和浩特,曾参与涉煤腐败倒查20年工作
  • 国铁集团:一季度全国海铁运输商品车同比增长33.62%
  • 专访|攸佳宁:手机只是矛盾导火索,重要的是看见孩子的内心
  • 中国铝业首季“开门红”:净利润超35亿元,同比增加近六成