sudo: вы не существуете в базе данных passwd

Что я имею:

FROM ubuntu:20.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt update -y \
    && apt install -y --no-install-recommends \
    sudo \
    && adduser --disabled-password --gecos "" --uid 1000 runner \
    && groupadd docker \
    && usermod -aG sudo runner \
    && usermod -aG docker runner \
    && echo "%sudo   ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers

USER runner

RUN sudo usermod -u 1001 runner && sudo groupmod -g 121 runner

Сборка этого Dockerfile приводит к ошибке:

sudo: you do not exist in the passwd database

Если я разделю последний RUN на два RUNs, ошибки нет:

FROM ubuntu:20.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt update -y \
    && apt install -y --no-install-recommends \
    sudo \
    && adduser --disabled-password --gecos "" --uid 1000 runner \
    && groupadd docker \
    && usermod -aG sudo runner \
    && usermod -aG docker runner \
    && echo "%sudo   ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers

USER runner

RUN sudo usermod -u 1001 runner
RUN sudo groupmod -g 121 runner

Почему это происходит?

1
задан 31 August 2021 в 14:24

1 ответ

В RUN sudo usermod -u 1001 runner && sudo groupmod -g 121 runner Docker запускает процесс sh как пользователь runner , запускающий эти команды. Первая команда изменяет UID этого пользователя. Но процесс sh по-прежнему использует старый идентификатор, поэтому, когда он пытается запустить вторую команду, он пытается запустить sudo с UID, которого больше нет в база данных passwd . Когда вы разделяете их на две команды RUN , Docker запускает новый процесс sh для второго RUN , который использует новый UID.

У меня нет решения для этого, так как я не знаю, почему вы делаете что-то подобное.Я бы посоветовал не изменять случайным образом UID пользователя при выполнении процессов от имени этого пользователя. sudo - не единственный инструмент, которому он не понравится.

2
ответ дан 4 September 2021 в 09:24

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

Похожие вопросы: