У меня проблема с многоступенчатой сборкой, когда двоичный файл, который создается на первом этапе, правильно копируется на этап 2, но когда вы пытаетесь запустить его, исполняемый файл не может быть найден.
Dockerfile:
FROM golang as goimage
ENV SRC=/go/src/
RUN mkdir -p /go/src/
WORKDIR /go/src/go_docker
RUN git clone https://github.com/bryonbaker/simple-microservice.git /go/src/go_docker/ \
&& CGO_ENABLED=0 GOOS=linux GOARCH=amd64
RUN go get github.com/gorilla/mux
RUN go build -o bin/go_docker
FROM alpine:latest AS microservice
RUN apk --no-cache add bash
ENV WORK_DIR=/docker/bin
WORKDIR $WORK_DIR
COPY --from=goimage /go/src/go_docker/bin/ ./
# Put a container-image version identifier in the root directory.
ARG VERSION=1.0
RUN echo $VERSION > image_version
EXPOSE 10000
#CMD ["go_docker"]
Результат:
$ docker run -ti -p 80: 10000 go-docker: последняя версия
/ docker / bin # lsgo_docker версия_образа
/ docker / bin # ./go_docker / bin / sh: ./go_docker: not found
/ docker / bin #
Если я запустил двоичный файл из созданного промежуточного контейнера goimage, он будет работать нормально. Размеры файлов совпадают ...
ПРИМЕЧАНИЕ. В этом файле докеров я закомментировал CMD и тестирую через оболочку. Если вы раскомментируете CMD, вы получите ту же проблему:
docker run go-docker: последний докер: ответ об ошибке от демона: сбой при создании среды выполнения OCI: container_linux.go: 344: запуск процесса контейнера вызвал "exec: \" go_docker \ ": исполняемый файл не найден в $ PATH": неизвестно. ERRO [0001] ошибка ожидания контейнера: контекст отменен
Я сделал тестовый код в репозитории git общедоступным, если вы хотите его посмотреть.
заранее спасибо