启动容器进程导致“exec:\”/ app \“:权限被拒绝”:未知

jad*_*joe 7 go docker alpine-linux

当我尝试使用 docker 构建 golang 时

docker的镜像构建成功,但是使用docker run运行时出现如下错误

docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"/app\": permission denied": unknown.
Run Code Online (Sandbox Code Playgroud)

我认为这个错误导致没有添加用户,所以我添加了组和用户,如下所示

RUN groupadd -g 10001 myapp \
    && useradd -u 10001 -g myapp myapp
Run Code Online (Sandbox Code Playgroud)

但没有修复。

这是我的源 docker 文件

FROM golang:1.12.9 as builder

ADD . /go/src/appname/

WORKDIR /go/src/appname/

ENV GO111MODULE=on

COPY go.mod .
COPY go.sum .

RUN go mod download
COPY . .

RUN  CGO_ENABLED=0 GOOS=linux GOARCH=amd64 make build target=prod

FROM alpine

RUN apk update \
  && apk add --no-cache

COPY --from=builder /go/src/ /app

ENTRYPOINT [ "/app" ]
Run Code Online (Sandbox Code Playgroud)

谢谢

BMi*_*tch 5

您将在此步骤中将整个源文件夹复制到目录中/app

COPY --from=builder /go/src/ /app
Run Code Online (Sandbox Code Playgroud)

然后你尝试执行该目录:

ENTRYPOINT [ "/app" ]
Run Code Online (Sandbox Code Playgroud)

相反,您需要复制 go build 在复制步骤中输出的已编译二进制文件。