【问题标题】:Adding a file to docker image results in "permission denied" error将文件添加到 docker 映像会导致“权限被拒绝”错误
【发布时间】:2023-04-03 19:22:01
【问题描述】:

我正在创建一个 docker golang 映像,但我的 golang 应用程序需要在启动时读取 config.yaml。我尝试添加文件,如下面的 dockerfile 所示:

FROM golang:alpine as builder
# Install git + SSL ca certificates
RUN apk update && apk add git && apk add ca-certificates
# Create appuser
COPY . $GOPATH/src/github.com/user/app/
WORKDIR $GOPATH/src/github.com/user/app/
#get dependancies
RUN go get -d -v
#build the binary
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /go/bin/app
# STEP 2 build a small image
# start from scratch
FROM scratch
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
ADD ./config.yaml /go/bin/app/
# Copy our static executable
COPY --from=builder /go/bin/app /go/bin/app
EXPOSE 3000
ENTRYPOINT ["/go/bin/app"]

但我收到以下错误:

docker:来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:348:启动容器进程导致“exec:\”/go/bin/app\“:权限被拒绝”:未知。

【问题讨论】:

  • 这个错误很好地解释了这个问题:它无法执行/go/bin/app,因为权限被拒绝。很可能是未设置执行位。
  • /go/bin/app 是一个目录。

标签: docker


【解决方案1】:

问题出在app的执行权限上,复制后尝试chmod +x到/go/bin/app。

RUN chmod a+x /go/bin/app 

【讨论】:

  • 我收到以下错误OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory": unknown
  • @user1990524 请养成仔细阅读错误信息的习惯,以便理解。那个新的错误信息,和原来的一样,告诉你问题:/bin/sh 不存在。
  • @user1990524 如果你是从头开始,sh 不存在。
  • 我知道这一点,但我按照建议编辑了我的代码,但它仍然无法正常工作。那就是我们我发布了错误。我觉得让viper可以从当前目录读取配置文件应该不是那么难......
  • @user1990524 什么是毒蛇?你想做什么??
【解决方案2】:

正如其他人指出的那样,可执行文件似乎没有设置可执行位。

由于scratch 图像甚至不包括外壳程序,因此您无法更改该块中的文件权限。但是你可以在从头开始之前的块中做到这一点:

...
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /go/bin/app
RUN chmod +x /go/bin/app
# STEP 2 build a small image
...

【讨论】:

  • 首先感谢您的帮助,但是当我使用 sudo docker run ... 运行时,我仍然遇到错误:docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"/go/bin/app\": permission denied": unknown.
【解决方案3】:

我认为你必须在复制文件后运行以下命令

RUN chmod 700 /go/bin/app

【讨论】:

    【解决方案4】:

    对于在尝试执行 shell 脚本时看到类似错误的人,有一个关于此github issue 的建议。你可以检查它是否适合你

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题,但问题是我试图在非主包中运行我的主函数。我是这个问题的一个非常奇怪的错误,但是首先在本地运行它给了我答案

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-21
        • 2019-02-28
        • 2020-09-16
        • 1970-01-01
        • 2015-10-02
        • 1970-01-01
        相关资源
        最近更新 更多