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
验证代码更新
重启后,可以通过以下方式验证代码是否已更新:
查看日志中的用户角色信息
docker logs mbe-api | findstr "is_admin"测试 API 接口
- 访问
/api/v1/users/devices - 检查返回的设备列表
- 访问
检查浏览器控制台
- 打开设备页面
- 查看 Network 标签中的 API 响应
常见问题
Q: 重启后仍然没有变化?
A: 尝试以下步骤:
清除 Python 缓存
# 在容器内执行 docker exec mbe-api find /app -name "*.pyc" -delete docker exec mbe-api find /app -name "__pycache__" -type d -exec rm -r {} +完全重建容器
docker-compose -f docker-compose.prod.yml up -d --force-recreate mbe-api检查代码是否正确保存
# 检查文件修改时间 Get-ChildItem src\users\router.py | Select-Object LastWriteTime
Q: 如何确认使用的是哪个 docker-compose 文件?
A: 检查运行中的容器:
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"
查看容器名称,通常:
mbe-api→docker-compose.prod.ymlmbe-api-tunnel→docker-compose.tunnel.yml
Q: 重启会影响数据库吗?
A: 不会。数据库在独立的容器中运行,重启 API 容器不会影响数据库。
生产环境注意事项
- 在低峰期重启:避免影响用户使用
- 先备份:重要更新前先备份数据
- 监控日志:重启后密切关注日志,确保服务正常
- 健康检查:重启后执行健康检查,确认服务正常
最后更新:2026-01-26