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

Docker运行python项目:使用Docker成功启动FastAPI应用

根据昨天成功使用阿里云镜像加速后,我是根据windows本地的python项目,直接传到了centos,然后再导入到docker里面,然后进行运行,主要是发现运行的时候,老是提示一些库的问题,还有就是一些python老版本里面有一些库没有,然后装了最新的镜像,还有就是,每次运行项目时,都建议把一次性把需要更新的库更新到requirements.txt 

问题背景

在部署FastAPI应用到Docker容器时,遇到了容器启动后立即退出的问题。经过多次尝试,发现主要原因是Python依赖模块缺失和容器配置不当。

完整解决步骤

1. 准备项目文件结构

text

houtai6/
├── Dockerfile
├── requirements.txt
├── Test1.py
├── static/
└── templates/

2. 创建完整的requirements.txt

bash

cat > requirements.txt <<EOF
fastapi>=0.68.0
uvicorn>=0.15.0
pymysql>=1.0.2
pandas>=1.3.0
python-dateutil>=2.8.2
numpy>=1.21.0
apscheduler>=3.8.1
python-multipart>=0.0.5
Jinja2>=3.0.0
pytz>=2021.3
EOF

3. 优化Dockerfile配置

dockerfile

FROM python:3.8-slimWORKDIR /appCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simpleCOPY . .CMD ["uvicorn", "Test1:app", "--host", "0.0.0.0", "--port", "8000"]

4. 构建和运行容器

bash

# 强制重建镜像
docker build --no-cache -t houtai6 .# 清理旧容器
docker rm -f houtai6_app 2>/dev/null# 运行新容器
docker run -d --name houtai6_app -p 8000:8000 houtai6

5. 验证服务状态

bash

# 检查容器状态
docker ps -a --filter "name=houtai6_app" --format "{{.Status}}"# 查看日志
docker logs -f houtai6_app

常见问题及解决方案

问题1:容器启动后立即退出

解决方案

  1. 检查缺少的Python模块并添加到requirements.txt

  2. 确保FastAPI应用中有持续运行的进程

  3. 添加以下代码保持容器运行:

python

from threading import Event
Event().wait()  # 阻塞主线程

问题2:端口冲突

bash

# 检查端口占用
netstat -tulnp | grep 8000# 改用其他端口
docker run -d --name houtai6_app -p 8080:8000 houtai6

问题3:容器名称冲突

bash

# 删除已有容器
docker rm -f houtai6_app# 重新运行
docker run -d --name houtai6_app -p 8000:8000 houtai6

高级调试技巧

1. 进入容器内部调试

bash

docker exec -it houtai6_app /bin/bash# 容器内检查
pip list
python -c "import pandas; print(pandas.__version__)"

2. 实时日志监控

bash

# 显示带时间戳的最后50行日志
docker logs -ft --tail 50 houtai6_app

3. 性能优化建议

dockerfile

# 使用多阶段构建减小镜像大小
FROM python:3.8-slim as builderWORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txtFROM python:3.8-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .ENV PATH=/root/.local/bin:$PATH
CMD ["uvicorn", "Test1:app", "--host", "0.0.0.0", "--port", "8000"]
http://www.xdnf.cn/news/17847.html

相关文章:

  • Java 中导出 Excel 文件的方法
  • 本地jar导入到本地仓科和远程仓库
  • [ HTML 前端 ] 语法介绍和HBuilderX安装
  • Spring Boot 3中JWT密钥安全存储方案
  • 图灵测试:人工智能的“行为主义判据”与哲学争议
  • 论,物联网日志系统架构如何设计?
  • 使用colmap自制3DGaussian_Splatting数据集
  • Java进阶学习之Stream流的基本概念以及使用技巧
  • 第四天~在CANFD或CAN2.0的ARXML文件中实现Multiplexor多路复用信号实战
  • 3D-R1、Scene-R1、SpaceR论文解读
  • Codeforces Round 1042 (Div. 3)
  • Ansys FreeFlow入门:对搅拌罐进行建模
  • vector 认识及使用
  • 【论文阅读-Part1】PIKE-RAG: sPecIalized KnowledgE and Rationale Augmented Generation
  • 如何通过WiFi将文件从安卓设备传输到电脑
  • Scrapy 基础框架搭建教程:从环境配置到爬虫实现(附实例)
  • Pytorch在FSDP模型中使用EMA
  • 考研408《计算机组成原理》复习笔记,第四章(3)——指令集、汇编语言
  • 14、C 语言联合体和枚举知识点总结
  • Linux系统Namespace隔离实战:dd/mkfs/mount/unshare命令组合应用
  • 报数游戏(我将每文更新tips)
  • 2022 年全国硕士研究生招生考试真题笔记
  • 杂记 01
  • elasticsearch基础概念与集群部署
  • Blender模拟结构光3D Scanner(一)外参数匹配
  • ARM芯片架构之CoreSight Channel Interface 介绍
  • 20250813测试开发岗(凉)面
  • Spring Security 前后端分离场景下的会话并发管理
  • 商品分类拖拽排序设计
  • 数据结构:队列(Queue)与循环队列(Circular Queue)