根據昨天成功使用阿里云鏡像加速后,我是根據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:容器啟動后立即退出
解決方案:
檢查缺少的Python模塊并添加到requirements.txt
確保FastAPI應用中有持續運行的進程
添加以下代碼保持容器運行:
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"]