Ошибка при создании непривилегированного пользователя в dockerfile
У меня есть докерфайл, который создает образ от имени непривилегированного пользователя. Но при docker run возникает ошибка:
docker: Error response from daemon: unable to find user user: no matching entries in passwd file.
Как ее можно исправить?
# этап 1 - установка зависимостей и компиляция
FROM python:3.9.10 AS builder
WORKDIR /sibsutis/hello_world
RUN groupadd -r user && useradd --no-log-init -r -g user user && id user
COPY requirements.txt .
RUN apt-get update && \
apt-get install --no-install-recommends -y build-essential gcc && \
pip install --no-cache-dir -r requirements.txt
COPY --chown=user:user . .
USER user
# этап 2 - запуск приложения в минимальном образе
FROM python:3.9.10-slim
USER user
WORKDIR /sibsutis/hello_world
COPY --from=builder /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages
COPY --from=builder --chown=user:user /sibsutis/hello_world .
ENTRYPOINT ["python", "main.py"]
Ответы (1 шт):
Потому что вы создаете пользователя в builder, а в "минимальном образе" его нет, он автоматически не копируется. Финальный образ создается на основе python:3.9.10-slim и никакого user нам нет. Собственно ошибка про это и говорит.
Также смысла в пользователе с ограниченными правами (не root) в builder не так много, т.к. это не финальный образ из которого будет запускаться приложение, а "временный", который предназначен для того, чтобы собрать приложение и "выбросить". А вот уже финальный ограничить пользователя от которого запускается приложение логично.
Попробуйте перенести команду RUN groupadd -r user && useradd --no-log-init -r -g user user && id user прямо перед USER user и удалить
COPY --chown=user:user . .
USER user