Saya memiliki masalah dengan pembangunan multi-tahap di mana biner yang sedang dibangun pada tahap pertama disalin dengan benar ke tahap 2, tetapi ketika Anda mencoba dan menjalankannya, file yang dapat dieksekusi tidak dapat ditemukan.
File buruh pelabuhannya adalah:
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"]
Hasilnya adalah:
$ docker run -ti -p 80:10000 go-docker:terbaru
/docker/bin # lsgo_docker image_version
/docker/bin # ./go_docker /bin/sh: ./go_docker: tidak ditemukan
/docker/bin #
Jika saya menjalankan biner dari wadah goimage perantara yang dibuat maka itu berjalan dengan baik. Ukuran filenya cocok...
CATATAN: Di dockerfile ini saya telah mengomentari CMD dan menguji melalui shell. Jika Anda menghapus komentar pada CMD, Anda mendapatkan masalah yang sama:
docker run go-docker:latest docker: Respons kesalahan dari daemon: Pembuatan runtime OCI gagal: container_linux.go:344: memulai proses container menyebabkan "exec: \"go_docker\": file yang dapat dieksekusi tidak ditemukan di $PATH": tidak diketahui. Kesalahan ERRO[0001] menunggu penampung: konteks dibatalkan
Saya telah membuat kode pengujian di git repo publik jika Anda ingin melihatnya.
Terima kasih sebelumnya