Reputation: 753
When I was trying to build golang using docker
The image build of docker was successful, but the following error occurred when running with docker run
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"/app\": permission denied": unknown.
I think this error cause no user add, so I added group and user as below
RUN groupadd -g 10001 myapp \
&& useradd -u 10001 -g myapp myapp
but didn't fix.
Here is my source docker file
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" ]
thanks
Upvotes: 7
Views: 15592
Reputation: 753
Thanks to the advice of everyone, I fix this issue
I couldn't just COPY with the build binary properly specified
before
COPY --from=builder /go/src/ /app
after
COPY --from=builder /go/src/build/build_app_name /app
thanks!!
Upvotes: 0
Reputation: 60094
You need to specify the output directory to your binary.
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o /app .
then copy the app directory
COPY --from=builder /app ./
RUN chmod +x ./app
ENTRYPOINT ["./app"]
Upvotes: 3
Reputation: 264851
You are copying your entire source folder into the directory /app
in this step:
COPY --from=builder /go/src/ /app
Then you try to execute the directory:
ENTRYPOINT [ "/app" ]
Instead, you need to copy the compiled binary that your go build outputs in the copy step.
Upvotes: 5