Я пытаюсь создать веб-сервер Go в небольших образах Docker. В идеале чистое изображение содержит только само приложение Go (и, возможно, поддерживает веб-компоненты, но не среду Go-building).
Вот мой Dockerfile
:
# golang:latest as build-env
FROM golang:latest AS build-env
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN cd /app && GO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o myapp .
# go build -o myapp
FROM scratch
COPY --from=build-env /app/myapp /app/images /
EXPOSE 8080
ENTRYPOINT /myapp
Он использует шаблон Docker Builder и скретч-изображение, которое представляет собой специальное пустое изображение докера.
Он работает нормально, но когда я его запускаю, я получаю:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory": unknown.
ОБНОВЛЕНИЕ:
Таким образом, ENTRYPOINT
необходимо изменить на форму exec:
ENTRYPOINT ["/myapp"]
Сделав это, я получаю новую ошибку:
standard_init_linux.go:207: exec user process caused "no such file or directory"
Использование небольшого образа Linux в качестве основы (т. Е. Alpine Linux) вместо нуля также не поможет:
$ docker run -it -p 8080:8080 go-web-docker-small
standard_init_linux.go:207: exec user process caused "no such file or directory"
$ docker run -it -p 8080:8080 go-web-docker-small /bin/sh -i
standard_init_linux.go:207: exec user process caused "no such file or directory"
Как это исправить? Thx!