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

Dockerfile中TypeScript编译失败,如何解决rootDir相关报错?

解决TypeScript编译Docker报错:File not under 'rootDir'的问题

咱们先直接定位问题根源:你的Dockerfile里的代码复制步骤出错了,导致容器内的文件结构和本地完全不一致,才触发了这个让人困惑的报错。

问题拆解

你本地的文件结构是这样的:

src/
app.ts
tsconfig.json
Dockerfile

但你的Dockerfile里写了COPY src .——这行命令的作用是把本地src目录里的所有内容(包括app.ts)直接拷贝到容器的工作目录/usr/src/app根目录下,所以容器里的实际结构变成了:

/usr/src/app/
  app.ts
  package.json
  tsconfig.json

而你的tsconfig.json里明确指定了rootDir: "./src",tsc会默认去/usr/src/app/src目录找源码,但这个目录在容器里根本不存在,自然就抛出了"文件不在rootDir下"的错误。

修复方案

只需要修改Dockerfile里的复制命令,确保本地的src目录完整拷贝到容器的工作目录中:

修改后的Dockerfile如下:

FROM node:12
WORKDIR /usr/src/app
# SETUP
COPY package.json .
COPY tsconfig.json .
COPY src ./src  # 这里是关键修改:把本地src目录完整复制到容器的src子目录
RUN npm install -g yarn@^1.16.0
RUN yarn install
# BUILD
RUN npx tsc

可选验证步骤

如果你想确认容器内的文件结构是否正确,可以在Dockerfile的BUILD步骤前临时加一行命令查看:

RUN ls -la /usr/src/app

执行构建时就能看到src目录是否存在,以及app.ts是否在src子目录下,确保结构符合预期。

这样修改后,tsc就能找到/usr/src/app/src/app.ts,完全匹配rootDir的配置,编译就能正常执行了。

内容的提问来源于stack exchange,提问作者David Callanan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:55:28