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

运行Golang构建的Docker镜像报permission denied错误如何解决?

问题原因
  • 核心错误为Dockerfile的COPY指令使用错误:构建阶段在/app目录下执行go build -o app生成的是名为app的独立可执行文件,原写法COPY --from=build /app /usr/local/bin/go_webhooks会把整个/app目录复制到目标路径,最终/usr/local/bin/go_webhooks实际为目录,对目录赋予执行权限也无法作为可执行文件启动,因此触发权限报错。
  • 次要可能原因:Go默认开启CGO编译,生成的二进制依赖glibc,而alpine基础镜像使用musl libc,依赖缺失也会引发类似权限报错。
  • 环境配置原因:宿主机开启SELinux强制访问控制,限制了容器内文件的执行权限。
解决方案
  1. 优先修正Dockerfile配置,明确复制可执行文件,同时编译阶段禁用CGO生成静态链接二进制,修正后参考配置如下:
FROM golang:1.17.2-alpine3.13 as build

WORKDIR /app

COPY . .
# 禁用CGO编译静态二进制,规避alpine依赖问题
RUN CGO_ENABLED=0 go build -o app

FROM alpine:3.7
# 明确复制单个可执行文件而非整个目录
COPY --from=build /app/app /usr/local/bin/go_webhooks

RUN chmod +x /usr/local/bin/go_webhooks

ENTRYPOINT ["/usr/local/bin/go_webhooks"]

重新构建镜像后启动即可解决90%以上该类问题。
2. 若修正配置后仍报错,可验证是否为SELinux导致:

  • 临时关闭SELinux验证:执行setenforce 0后重新启动容器
  • 如需永久关闭,可修改/etc/selinux/config文件,将SELINUX字段值改为disabled,重启宿主机后生效。
  1. 临时验证也可在docker run命令中添加--privileged参数提升权限:
docker run --privileged -p 8000:8000 --name go_webs3 d5f30e8f9703

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:15:04