Docker 容器重启指南

问题说明

当修改了代码后,即使代码文件通过 volume 挂载到容器中,Python 的模块导入缓存可能导致新代码不会立即生效。需要重启容器才能加载新代码。

快速重启方法

方法 1:使用重启脚本(推荐)

# Windows PowerShell
.\scripts\restart_api.ps1

方法 2:手动重启

# 1. 重启 API 容器
docker-compose -f docker-compose.prod.yml restart mbe-api

# 或者如果使用 tunnel 配置
docker-compose -f docker-compose.tunnel.yml restart mbe-api

# 2. 查看日志确认启动成功
docker logs -f mbe-api

方法 3:完全重建(如果重启无效)

# 停止并删除容器
docker-compose -f docker-compose.prod.yml stop mbe-api
docker-compose -f docker-compose.prod.yml rm -f mbe-api

# 重新启动
docker-compose -f docker-compose.prod.yml up -d mbe-api

# 查看日志
docker logs -f mbe-api

检查服务状态

1. 检查容器是否运行

docker ps | findstr mbe-api

2. 检查健康状态

# 访问健康检查接口
curl http://localhost:8000/api/health

# 或使用 PowerShell
Invoke-RestMethod -Uri "http://localhost:8000/api/health"

3. 查看实时日志

docker logs -f mbe-api

验证代码更新

重启后,可以通过以下方式验证代码是否已更新:

  1. 查看日志中的用户角色信息

    docker logs mbe-api | findstr "is_admin"
    
  2. 测试 API 接口

    • 访问 /api/v1/users/devices
    • 检查返回的设备列表
  3. 检查浏览器控制台

    • 打开设备页面
    • 查看 Network 标签中的 API 响应

常见问题

Q: 重启后仍然没有变化?

A: 尝试以下步骤:

  1. 清除 Python 缓存

    # 在容器内执行
    docker exec mbe-api find /app -name "*.pyc" -delete
    docker exec mbe-api find /app -name "__pycache__" -type d -exec rm -r {} +
    
  2. 完全重建容器

    docker-compose -f docker-compose.prod.yml up -d --force-recreate mbe-api
    
  3. 检查代码是否正确保存

    # 检查文件修改时间
    Get-ChildItem src\users\router.py | Select-Object LastWriteTime
    

Q: 如何确认使用的是哪个 docker-compose 文件?

A: 检查运行中的容器:

docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"

查看容器名称,通常:

  • mbe-apidocker-compose.prod.yml
  • mbe-api-tunneldocker-compose.tunnel.yml

Q: 重启会影响数据库吗?

A: 不会。数据库在独立的容器中运行,重启 API 容器不会影响数据库。

生产环境注意事项

  1. 在低峰期重启:避免影响用户使用
  2. 先备份:重要更新前先备份数据
  3. 监控日志:重启后密切关注日志,确保服务正常
  4. 健康检查:重启后执行健康检查,确认服务正常

最后更新:2026-01-26