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

WSL Docker环境构建Java镜像遇permission denied问题求助

解决WSL Docker环境中entrypoint.sh权限拒绝问题

问题根源

你在Dockerfile中执行了chmod +x /usr/local/bin/entrypoint.sh,但启动容器时,docker-compose的卷挂载操作会把本地的./docker/entrypoint.sh覆盖容器内已设置好权限的脚本文件。WSL环境使用类Linux文件系统,严格遵循权限规则,若本地脚本没有可执行权限,挂载到容器后也会继承无权限状态;而Windows的NTFS文件系统不支持Linux权限位,Docker会自动为挂载的shell脚本赋予执行权限,因此Windows环境无此问题。

解决方案

方案1:给WSL本地的脚本添加执行权限

直接在WSL终端中执行命令,为本地的entrypoint.sh添加可执行权限:

chmod +x ./docker/entrypoint.sh

执行完成后重新启动容器即可。

方案2:将脚本打包进镜像(推荐)

这种方式彻底避免挂载覆盖的问题,更符合容器镜像的设计原则:

  1. 修改Dockerfile,添加COPY指令将本地脚本复制到镜像内,再设置权限:
# 在WORKDIR指令之后添加
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN ["chmod", "+x", "/usr/local/bin/entrypoint.sh"]
  1. 修改docker-compose.yml,删除entrypoint.sh的卷挂载配置:
# 移除这一行
- ./docker/entrypoint.sh:/usr/local/bin/entrypoint.sh:cached
  1. 重新构建镜像并启动容器。

方案3:挂载时指定权限(临时 workaround)

如果必须挂载本地脚本,可在docker-compose.yml的卷挂载配置中强制设置权限:

- ./docker/entrypoint.sh:/usr/local/bin/entrypoint.sh:cached,ro,mode=0755

此方式仅为临时解决,长期来看还是方案2更稳定可靠。

内容的提问来源于stack exchange,提问作者Mr. Kenneth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:25:24