Docker部署EvalAI-ngx失败:两类报错排查求助
最近你碰到的这两个问题,我在处理Angular + Docker项目时也遇到过,咱们一步步拆解解决:
一、处理 TypeError: eval() arg 1 must be a string, bytes or code object 错误
这个错误本质是eval()函数接收到了非字符串/字节/代码对象的参数,大概率是项目里的动态配置或环境变量传递出了问题:
检查环境变量传递:
用docker exec <前端容器名称> env命令查看容器内的环境变量,确认所有需要的变量(比如API地址、环境标识等)都正确设置。如果某个关键变量未定义或值为None,就会导致eval调用失败。可以在docker-compose.yml里明确指定这些变量,确保传递无误。清理Docker缓存:
旧缓存经常会残留过时的依赖或配置,执行以下命令彻底清理:docker system prune -a之后重新执行
docker-compose up --build,让容器完全重新构建。定位eval调用的代码位置:
在项目代码里全局搜索eval(,找到调用它的地方,检查传入的参数是不是从某个动态来源(比如环境变量、配置文件)获取的。如果是,确保这些来源返回的是字符串类型,必要时添加类型转换(比如str(variable))。
二、解决 Data path ".builders['app-shell']" should have required property 'class' 错误
这个是Angular CLI的配置兼容性问题,app-shell构建器的配置格式在不同Angular版本里有变化:
检查
angular.json的配置:
打开项目的angular.json,找到app-shell的构建器配置,确保它符合当前Angular版本的要求。正确的配置示例如下(以Angular 12+为例):"app-shell": { "builder": "@angular-devkit/build-angular:app-shell", "options": { "browserTarget": "evalai:build", "serverTarget": "evalai:server", "route": "shell" }, "configurations": { "production": { "browserTarget": "evalai:build:production", "serverTarget": "evalai:server:production" } } }如果你的配置里缺少
builder指定的正确路径,或者关键属性缺失,就会触发这个错误。同步Angular依赖与配置:
不要手动修改package.json里的Angular版本号,而是用Angular CLI的升级命令自动同步配置:
如果能在容器内执行命令,进入容器后运行:ng update @angular/cli @angular/core或者在本地项目目录执行该命令,更新后再重新构建Docker镜像。
检查Docker构建流程:
确认docker-compose.yml里的前端构建步骤是正确的:先执行npm install安装所有依赖,再执行ng build构建项目。如果构建命令跳过了依赖安装,或者使用了过时的构建参数,也会导致配置不兼容。
通用排查技巧
查看完整容器日志:
用docker logs -f <前端容器ID/名称>实时查看日志,找到错误发生的具体调用栈,这样能更快定位到代码或配置的问题点。本地验证项目:
在非Docker环境下启动项目(先执行npm install,再ng serve),如果本地也出现相同错误,说明问题在项目本身;如果本地正常,那就是Docker构建过程中的环境变量、缓存或命令问题。确认子模块完整性:
如果项目包含子模块,执行git submodule update --init --recursive确保所有子模块都正确克隆并更新到最新版本。
内容的提问来源于stack exchange,提问作者Suryansh.p

