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

时间:2018-11-24 17:23:30

标签: docker

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

5 个答案:

答案 0 :(得分:2)

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

RUN chmod 700 /go/bin/app

答案 1 :(得分:2)

问题在于执行app的许可,复制后尝试chmod +x到/ go / bin / app。

RUN chmod a+x /go/bin/app 

答案 2 :(得分:1)

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

由于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
...

答案 3 :(得分:0)

对于尝试执行Shell脚本时遇到类似错误的人,此github issue上有一个建议。您可以检查一下是否适合您

答案 4 :(得分:0)

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