执行docker system prune -a后trix.css缺失,Node.js构建失败如何解决?
问题背景
执行docker system prune -a清理Docker资源后,Node.js容器构建失败,核心问题是trix.css文件缺失。使用sudo docker-compose -f docker-compose-staging.yml build nodejs重新构建仍无效果,疑惑Dockerfile中本该生成该文件的步骤未生效。
错误日志(翻译后)
Required path doesn't exist: /code/bower_components/trix/dist/trix.css trix
[13:57:39] 'vendorcss' 任务执行失败,耗时1.63毫秒
[13:57:39] 错误:Promise被拒绝但未返回错误信息
在 Domain.onError (/usr/local/lib/node_modules/gulp/node_modules/async-done/index.js:49:15)
在 Object.onceWrapper (events.js:315:30)
在 emitOne (events.js:116:13)
在 Domain.emit (events.js:211:7)
在 Domain._errorHandler (domain.js:134:21)
在 process._fatalException (bootstrap_node.js:375:33)
[13:57:39] 'staging' 任务执行失败,耗时41毫秒
ERROR: Service 'nodejs' 构建失败:命令 '/bin/sh -c gulp staging' 返回非零代码:1
解决步骤
- 检查Dockerfile依赖安装逻辑
确认Dockerfile中bower install命令在gulp staging之前执行,且未使用--production参数排除trix(如果trix是开发依赖)。docker system prune -a会删除所有未使用的镜像层,之前的依赖缓存被清空后,若构建时未重新执行依赖安装,就会导致文件缺失。 - 强制无缓存构建
执行docker-compose -f docker-compose-staging.yml build --no-cache nodejs,跳过所有缓存镜像层,强制重新拉取依赖并执行所有构建步骤。 - 验证bower依赖配置
检查项目根目录的bower.json,确认trix已被正确添加到依赖列表,版本号无错误。 - 修复gulp任务依赖关系
检查vendorcssgulp任务的定义,确保它依赖于bower依赖安装完成的任务(比如bower:install),避免在依赖未拉取完成时就尝试引用trix.css。 - 临时排查文件结构
修改Dockerfile,在RUN gulp staging之前添加RUN ls -la /code/bower_components/trix/dist/命令,构建时会输出该目录的文件列表,确认是依赖未安装还是路径引用错误。
内容的提问来源于stack exchange,提问作者bambuTR

