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

发布于:2025-08-15 ⋅ 阅读:(87) ⋅ 点赞:(0)

根据昨天成功使用阿里云镜像加速后,我是根据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-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

COPY . .

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 builder

WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt

FROM 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"]

网站公告


今日签到

点亮在社区的每一天
去签到