You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止代码出错时Docker容器自动关闭?

解决shotel_backend容器因代码错误退出(exited with code 1)的问题

你的问题很典型:当Django后端的runserver进程因为代码错误崩溃时,Docker会因为主进程终止而直接停止容器,就出现了shotel_backend exited with code 1的提示。下面给你分两个层面来解决:

一、快速阻止容器关闭:配置Docker自动重启策略

这是最快的临时解决方案,让容器在进程崩溃后自动重启,保证服务不会一直处于关闭状态。你只需要在docker-compose.yml的backend服务中添加restart配置项:

修改后的docker-compose.yml:

version: '3'
services:
  backend:
    container_name: shotel_backend
    build: ./backend
    volumes:
      - ./backend/:/backend
    working_dir: /backend/
    command: pipenv run python manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000
    # 选择适合的重启策略,二选一即可
    restart: always  # 无论退出原因,都自动重启容器
    # restart: unless-stopped  # 除非手动停止容器,否则自动重启

二、彻底解决:定位并修复代码问题

重启策略只是“救急”,要从根源上解决容器退出的问题,你需要找到导致runserver崩溃的具体原因:

  • 查看容器崩溃日志:执行docker logs shotel_backend命令,查看崩溃时的错误堆栈信息,这能直接帮你定位到出错的代码位置;
  • 排查启动/运行时错误:
    • 如果是启动阶段崩溃,大概率是settings.py配置错误、依赖包缺失(可以检查pipenv install的输出,确认所有依赖都安装成功);
    • 如果是运行时崩溃,说明代码中存在未捕获的异常,你需要给关键逻辑添加try-except块,避免异常直接导致进程终止;
  • 生产环境优化:如果这是生产环境,不要用runserver(它只是开发用的轻量服务器),改用gunicorn或uwsgi这类生产级服务器,它们在处理单个请求错误时不会导致整个进程崩溃。

开发环境小提示

在开发阶段,Django的runserver默认遇到代码错误时只会在浏览器展示错误页面,不会直接崩溃。如果你的runserver直接退出,建议先检查是否是语法错误或者严重的配置问题——这类错误会导致runserver启动失败或立即崩溃。

内容的提问来源于stack exchange,提问作者Sevy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 13:57:30