Ошибка при создании непривилегированного пользователя в dockerfile

Рейтинг: 0Ответов: 1Опубликовано: 03.03.2023

У меня есть докерфайл, который создает образ от имени непривилегированного пользователя. Но при 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"]

Ответы

▲ 0

Потому что вы создаете пользователя в 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