首页 文章

将文件添加到docker镜像会导致“权限被拒绝”错误

提问于
浏览
0

我正在创建一个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 \“:权限被拒绝”:未知 .

3 回答

  • 2

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

    由于 scratch 图像甚至不包括shell,因此无法更改该块中的文件权限 . 但你可以在划痕前的块中做到这一点:

    ...
    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
    ...
    
  • 2

    问题在于执行 app 的权限,请在复制后尝试 chmod +x 到/ go / bin / app .

    RUN chmod a+x /go/bin/app
    
  • 1

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

    RUN chmod 700 /go/bin/app
    

相关问题