Express项目Railway部署Docker构建失败求助
解决Railway部署Express+TypeScript项目构建失败(exit code 2)的问题
我在Railway部署Express+TypeScript项目时遇到构建停滞问题,本地构建完全正常。尝试过设置CI=false(虽多用于React场景)、修改package.json、添加.env参数等方法,耗时数小时仍未解决。构建日志及package.json配置如下:
构建日志
Dockerfile:24 ------------------- 22 | # build phase 23 | COPY . /app/. 24 | >>> RUN --mount=type=cache,id=s/9fae86cc-8dcb-4283-ab13-5ad288f3dace-node_modules/cache,target=/app/node_modules/.cache npm run build 25 | 26 | ------------------- ERROR: failed to solve: process "/bin/bash -ol pipefail -c npm run build" did not complete successfully: exit code: 2 Error: Docker build failed
package.json配置
{ "version": "1.0.0", "description": "", "lockfileVersion": 3, "requires": true, "main": "server.js", "scripts": { "build": "npx tsc", "start": "node ./build/server.js", "dev": "concurrently \"npx tsc --watch\" \"nodemon -q build/server.js\"" }, "dependencies": { "bcrypt": "^5.1.1", "cors": "^2.8.5", "dotenv": "^16.3.1", "express": "^4.18.2", "joi": "^17.11.0", "jose": "^5.1.1", "mariadb": "^3.2.2", "mysql2": "^3.6.3", "sequelize": "^6.35.0", "sequelize-typescript": "^2.1.5", "uuid": "^9.0.1", "winston": "^3.11.0" }, "devDependencies": { "@types/bcrypt": "^5.0.2", "@types/cors": "^2.8.16", "@types/express": "^4.17.21", "@types/node": "^20.9.0", "@types/uuid": "^9.0.7", "concurrently": "^8.2.2", "nodemon": "^3.0.1", "ts-node": "^10.9.1", "typescript": "^5.2.2" } }
可行的解决步骤
- 查看完整TypeScript编译日志:修改package.json的
build脚本为npx tsc --noEmitOnError,强制编译出错时输出详细信息;同时本地执行npm run build,确认是否有隐藏的编译错误(本地可能因tsconfig配置宽松跳过报错)。 - 检查Docker依赖安装:确认Dockerfile在构建阶段执行的是
npm ci而非npm ci --only=production,确保安装了TypeScript等dev依赖;若生产阶段不需要dev依赖,可在构建完成后再清理。 - 处理原生模块编译问题:bcrypt是原生模块,需在Dockerfile的构建阶段添加编译环境,比如执行
apt-get update && apt-get install -y build-essential python3;也可以替换为纯JS实现的bcryptjs避免编译依赖。 - 校验tsconfig配置:确认
outDir设为./build(与start脚本路径匹配),include/exclude覆盖所有需要编译的文件,target/module等配置与Railway的Node环境版本兼容。 - 清理缓存重新构建:在Railway控制台选择“Clear Cache and Deploy”,彻底清除旧缓存后重新触发构建。
内容的提问来源于stack exchange,提问作者SiberianCoffe
相关产品推荐
相关产品推荐

