Docker容器启动报错:exec "/app/producer"权限被拒绝求助
解决OCI Runtime权限拒绝问题
针对你遇到的exec: "/app/producer": permission denied错误,可尝试以下几种方案:
1. 恢复执行权限设置
你注释掉了RUN chmod +x ./producer,取消注释这行命令,确保二进制文件拥有执行权限:
RUN chmod +x ./producer
即使编译阶段生成的文件有执行权限,跨阶段复制时可能因Alpine的默认权限配置丢失执行位,手动添加权限是最直接的修复方式。
2. 在COPY阶段直接设置权限
如果你的Docker版本≥1.24,可以使用COPY命令的--chmod参数,一步完成复制和权限配置,替代单独的chmod命令:
COPY --from=builder --chmod=755 /app/producer .
3. 强制静态编译二进制
虽然你已经设置了CGO_ENABLED=0,但部分依赖可能仍会生成动态链接的二进制。Alpine使用musl libc,可能与glibc编译的二进制不兼容,尝试添加-a参数强制静态编译:
RUN go build -a -o producer
这能确保二进制不依赖系统动态库,同时也能排除因动态链接问题导致的异常权限报错。
4. 验证Builder阶段的二进制权限
在builder阶段添加一行命令,检查生成的producer文件权限是否正常:
RUN go build -o producer && ls -l /app/producer
如果输出中没有x权限,说明编译阶段就没有生成可执行文件,需要检查Go项目的编译配置。
内容的提问来源于stack exchange,提问作者Eziz Durdyyev
相关产品推荐
相关产品推荐

