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
相关产品推荐
相关产品推荐

