Django Cookiecutter Docker构建失败:超出最大递归深度
我之前碰到过一模一样的问题,给你几个亲测有效的解决方向:
升级Docker Compose版本
这个递归报错大概率是旧版Docker Compose的已知bug,尤其是版本低于1.25.0的情况。先运行docker-compose --version查看当前版本,然后升级到最新稳定版:- Linux系统可以用官方脚本安装:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose,之后给文件加执行权限:sudo chmod +x /usr/local/bin/docker-compose - macOS用户直接用Homebrew更新:
brew upgrade docker-compose - Windows用户通过Docker Desktop的设置界面就能完成更新
- Linux系统可以用官方脚本安装:
排查production.yml的循环依赖
仔细检查你的production.yml配置,有没有服务之间出现循环依赖?比如服务A的depends_on包含服务B,而服务B的depends_on又引用了服务A,这种循环会让Docker Compose在解析配置时陷入递归死循环。可以临时注释掉部分服务的依赖项,逐步排查出问题根源。简化配置定位问题服务
把production.yml里的服务逐个注释掉,每次只保留一个核心服务执行构建测试,这样能快速定位是哪个服务的配置触发了错误。比如先只保留web服务,构建成功后再依次添加其他服务,直到复现递归报错。清理Docker缓存
有时候缓存的镜像层可能存在异常,导致构建过程中出现奇怪的递归问题。运行docker system prune -a清理所有未使用的镜像、容器和缓存,之后重新执行构建命令试试。检查Cookiecutter模板的生产脚本
部分Cookiecutter Docker模板的生产环境entrypoint或构建脚本里可能有递归调用逻辑,比如某个shell脚本或Python脚本无限调用自身。可以查看模板生成的production.yml里的command或entrypoint配置,或者构建阶段执行的脚本,排查是否存在无限循环的代码。
内容的提问来源于stack exchange,提问作者Phil Butcher

