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

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.dtcms.com/a/330774.html

相关文章:

  • vue3+leaflet案例:告警系统GIS一张图(附源码下载)
  • Mybatis实现页面增删改查
  • 服务器的定义-哈尔滨云前沿
  • [机器学习]07-基于多层感知机的鸢尾花数据集分类
  • Effective Java笔记:要在公有类而非公有域中使用访问方法
  • 解决Maven编译时JAVA_HOME配置错误问题:从报错到根治的完整方案
  • 自动驾驶与人形机器人的技术分水岭
  • springboot博客实战笔记02
  • React.memo、useMemo 和 React.PureComponent的区别
  • 智慧城市SaaS平台/专项管理系统
  • 板子识别出来的所有端点号等信息
  • C++中的链式操作原理与应用(三):专注于异步操作延的C++开源库 continuable
  • 决策树 >> 随机森林
  • 智慧工地从工具叠加到全要素重构的核心引擎
  • Claude Code频繁出错怎么办?深入架构层面的故障排除指南
  • 【Linux学习|黑马笔记|Day4】IP地址、主机名、网络请求、下载、端口、进程管理、主机状态监控、环境变量、文件的上传和下载、压缩和解压
  • 【论文阅读】基于表面肌电信号的下肢多关节运动估计:一种深度卷积神经网络方法
  • [小练习]生成54张扑克牌,洗牌。
  • 解决 VSCode 运行 Python 时 ModuleNotFoundError: No module named ‘open_webui‘ 问题
  • 三角洲知识点
  • CI/CD流水线搭建流程
  • 药房发药的“时间密码”:同步时钟用药安全?
  • 抗辐照CANFD通信芯片在高安全领域国产化替代的研究
  • CMake进阶: externalproject_add用于在构建阶段下载、配置、构建和安装外部项目
  • 常见的Jmeter压测问题
  • 飞算 JavaAI 云原生实践:基于 Docker 与 K8s 的自动化部署架构解析
  • 用架构建模工具Sparx EA绘制企业转型路线图
  • C++状态模式详解:从OpenBMC源码看架构、原理与应用
  • NineData云原生智能数据管理平台新功能发布|2025年7月版
  • 云原生俱乐部-k8s知识点归纳(2)