Почему переключение базового образа в многоэтапной сборке Docker с distroless на alpine приводит к «вызванному пользовательскому процессу exec: нет такого файла или каталога»?

Я следую руководству на https://docs.docker.com/language/golang/build-images/ , чтобы узнать, как лучше всего выполнить многоэтапную сборку Docker для приложения Go. Я клонировал репо:

      git clone https://github.com/olliefr/docker-gs-ping

И я выполнил команду в нижней части руководства, чтобы создать образ:

      docker build -t docker-gs-ping:multistage -f Dockerfile.multistage .

Я также запустил собственную команду для запуска временного контейнера из образа:

      docker run --rm docker-gs-ping:multistage

Это сработало нормально. Я вижу вывод приложения в своем терминале. Однако я хотел переключить образ второго слоя с образа Distroless в руководстве ( gcr.io/distroless/base-debian10) к alpine:3. Когда я внес это изменение, создал новый образ и попытался запустить новый образ с помощью той же команды, что и выше, я получил сообщение об ошибке о том, что пользователь не существует:

      docker: Error response from daemon: unable to find user nonroot: no matching entries in passwd file.

Это имело смысл для меня. Похоже, что в образе Distroless есть этот пользователь, а в образе Alpine — нет. Поэтому я удалил USER nonroot:nonrootиз докерфайла. Итак, на данный момент вторая половина моего Dockerfile выглядит так:

      ##
## Deploy
##

FROM alpine:3

WORKDIR /

COPY --from=build /docker-gs-ping /docker-gs-ping

EXPOSE 8080

ENTRYPOINT ["/docker-gs-ping"]

Затем я создал новый образ и попытался запустить новый образ, используя ту же команду, что и выше. На этот раз я получил следующую ошибку:

      standard_init_linux.go:228: exec user process caused: no such file or directory

У меня возникли проблемы с устранением этой ошибки. Почему переключение моего базового изображения таким образом вызывает эту ошибку?

0 ответов

Другие вопросы по тегам