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

Win11运行Node.js Docker容器报docker-entrypoint.sh权限拒绝错误

问题现象

Windows 11环境下运行Docker启动Node.js容器,启动时报错:

/usr/local/bin/docker-entrypoint.sh: 11: exec: .: Permission denied

已在Dockerfile中添加为docker-entrypoint.sh赋予执行权限的指令,所有自行尝试的排查手段、周边人提供的思路均无效。
原Dockerfile配置:

FROM node

RUN mkdir -p /home/node/app && chown -R node:node /home/node/app

RUN chmod +x /usr/local/bin/docker-entrypoint.sh

WORKDIR /home/node/app

USER node

COPY --chown=node:node package.json .

COPY --chown=node:node . .

RUN npm install

CMD ["node", "js/main.js"]
问题原因

你添加的RUN chmod +x /usr/local/bin/docker-entrypoint.sh属于无效操作:官方Node基础镜像自带的入口脚本本身已经配置了可执行权限,这行命令既没解决核心问题,执行时机也不对。
报错本质是Windows环境Docker的特有问题:

  • 你在文件复制、依赖安装步骤之前就切换到了node低权限用户,Windows的NTFS文件系统默认不支持Linux的rwx权限位标记,构建时复制进镜像的文件不会自动带上可执行权限,低权限用户无法正常执行入口脚本需要调用的文件
  • 如果你开启了WSL2的文件共享优化,还会进一步放大权限映射bug,导致所有挂载/复制进容器的文件全部丢失执行位
  • 提前切换用户还会导致npm install阶段生成的依赖脚本权限异常,入口脚本执行到exec逻辑时就会抛出权限拒绝错误
修复方案

按如下规则调整Dockerfile即可解决:

  1. 删除无效的RUN chmod +x /usr/local/bin/docker-entrypoint.sh行
  2. 所有文件复制、依赖安装、权限调整操作全部用root用户执行,所有操作完成后最后再切换到node用户
  3. 给工作目录递归设置正确的权限和可执行位,抵消Windows文件系统的权限位缺失问题

调整后可用的Dockerfile配置:

FROM node

WORKDIR /home/node/app

# 先复制依赖清单安装依赖,利用Docker缓存加速构建
COPY package.json ./
RUN npm install

# 复制全量项目文件
COPY . .

# 统一调整目录归属和权限
RUN chown -R node:node /home/node/app && chmod -R 755 /home/node/app

# 所有构建操作完成后最后切换到低权限用户
USER node

CMD ["node", "js/main.js"]

如果调整后仍有报错,排查三个Windows环境专属配置项:

  • 检查本地项目根目录是否存在自定义的docker-entrypoint.sh文件,避免COPY指令意外覆盖基础镜像自带的官方入口脚本
  • 打开Docker Desktop设置,关闭WSL2引擎下的Enable experimental WSL 2 file sharing optimizations实验特性,重启Docker后重新构建镜像,该特性会导致WSL2场景下文件权限映射完全失效
  • 如果项目是通过Git拉取,先执行git config --global core.autocrlf false后重新拉取代码,避免Windows默认的CRLF换行符破坏脚本格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:03:24