Docker镜像与Bun构建问题:运行时权限拒绝错误
解决Docker运行时
exec ./bin failed: Permission denied权限问题 问题根源
你遇到的权限拒绝错误,是因为gcr.io/distroless/base-debian11镜像默认以非root用户运行,而从build阶段复制过来的/app/bin文件缺少执行权限,或者文件的所属用户/组与distroless的运行用户不匹配。
可行解决方案
方案1:在构建阶段为可执行文件添加权限
修改build阶段的Dockerfile,在生成bin文件后直接赋予其执行权限:
FROM node:20.12.2 as build RUN npm install -g bun@1.1.10 WORKDIR /app COPY . . RUN bun install --frozen-lockfile --prefer-offline RUN npm run build # 给生成的bin文件添加执行权限 RUN chmod +x ./bin
方案2:复制文件时直接设置权限(Docker 19.03+支持)
如果你的Docker版本满足要求,可以在COPY指令中通过--chmod参数直接设置文件权限,无需在build阶段额外操作:
FROM gcr.io/distroless/base-debian11 WORKDIR /app # 复制时同时设置可执行权限 COPY --from=build --chmod=755 ./bin /app/bin CMD [ "/app/bin" ]
方案3:切换到root用户运行(不推荐生产环境)
作为临时应急方案,可以在distroless阶段切换到root用户执行程序,但这会降低容器安全性,不建议用于生产环境:
FROM gcr.io/distroless/base-debian11 WORKDIR /app COPY --from=build ./bin /app/bin # 切换到root用户 USER root CMD [ "/app/bin" ]
内容的提问来源于stack exchange,提问作者Emmanuel Amodu
相关产品推荐
相关产品推荐

