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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:26:07