启动容器进程导致 "exec: \"/app\": permission denied": unknown
starting container process caused "exec: \"/app\": permission denied": unknown
当我尝试使用 docker
构建 golang 时
docker镜像构建成功,但是运行docker运行
出现如下错误
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"/app\": permission denied": unknown.
我认为这个错误导致没有用户添加,所以我添加了组和用户如下
RUN groupadd -g 10001 myapp \
&& useradd -u 10001 -g myapp myapp
但没有修复。
这是我的源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" ]
谢谢
您将在这一步中将整个源文件夹复制到目录 /app
中:
COPY --from=builder /go/src/ /app
那你尝试执行目录:
ENTRYPOINT [ "/app" ]
相反,您需要在复制步骤中复制 go build 输出的已编译二进制文件。
您需要指定二进制文件的输出目录。
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o /app .
然后复制app目录
COPY --from=builder /app ./
RUN chmod +x ./app
ENTRYPOINT ["./app"]
感谢大家的建议,我修复了这个问题
我不能只复制正确指定的构建二进制文件
之前
COPY --from=builder /go/src/ /app
之后
COPY --from=builder /go/src/build/build_app_name /app
谢谢!!
当我尝试使用 docker
构建 golang 时docker镜像构建成功,但是运行docker运行
出现如下错误docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"/app\": permission denied": unknown.
我认为这个错误导致没有用户添加,所以我添加了组和用户如下
RUN groupadd -g 10001 myapp \
&& useradd -u 10001 -g myapp myapp
但没有修复。
这是我的源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" ]
谢谢
您将在这一步中将整个源文件夹复制到目录 /app
中:
COPY --from=builder /go/src/ /app
那你尝试执行目录:
ENTRYPOINT [ "/app" ]
相反,您需要在复制步骤中复制 go build 输出的已编译二进制文件。
您需要指定二进制文件的输出目录。
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o /app .
然后复制app目录
COPY --from=builder /app ./
RUN chmod +x ./app
ENTRYPOINT ["./app"]
感谢大家的建议,我修复了这个问题
我不能只复制正确指定的构建二进制文件
之前
COPY --from=builder /go/src/ /app
之后
COPY --from=builder /go/src/build/build_app_name /app
谢谢!!