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

WSL2环境中Docker容器运行npm脚本遇Permission denied问题求助

解决WSL集成Docker环境下ts-node权限拒绝问题

问题背景

在开启WSL集成的Windows环境中,基于官方node镜像构建Docker容器后,运行任意npm脚本均报错sh: 1: ts-node: Permission denied。相同镜像在原生Linux系统可正常运行,已尝试Debian和openSUSE两种WSL发行版,问题依旧。

环境配置

  • 已安装Docker Desktop,启用WSL集成并设置默认发行版
  • Dockerfile内容:
FROM node

WORKDIR /srv/app

COPY ["package.json", "package-lock.json", "./"]

RUN npm install

COPY . .

CMD ["npm", "start"]
  • npm start脚本:ts-node src/app.ts
  • 运行命令:
docker build -t sof .
docker run sof
  • 报错信息:
> app@1.0.0 start
> ts-node src/app.ts

sh: 1: ts-node: Permission denied

解决方案

方案1:用npx调用本地ts-node

修改package.json中的start脚本,通过npx直接调用项目本地安装的ts-node:

"scripts": {
  "start": "npx ts-node src/app.ts"
}

npx会自动查找项目node_modules/.bin目录下的ts-node,避免全局路径的权限映射问题。

方案2:修复node_modules二进制文件权限

在Dockerfile中添加权限设置步骤,确保ts-node可执行:

FROM node

WORKDIR /srv/app

COPY ["package.json", "package-lock.json", "./"]

RUN npm install

COPY . .

# 修复二进制文件执行权限
RUN chmod -R +x node_modules/.bin/

CMD ["npm", "start"]

WSL与Windows的文件权限映射可能导致COPY后的二进制文件丢失执行权限,此命令可强制添加执行权限。

方案3:切换为node用户运行容器

官方node镜像内置了非root的node用户,切换用户可避免root权限与WSL文件系统的冲突:

FROM node

WORKDIR /srv/app

COPY ["package.json", "package-lock.json", "./"]

RUN npm install

COPY . .

# 切换为node用户
USER node

CMD ["npm", "start"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:15:06