Рейтинг:0

Несоответствие между /etc/group и «id -G» может быть связано с настройкой докера?

флаг fr

Я создал Dockerfile, использую свой текущий идентификатор пользователя для запуска приложения, чтобы контейнер Docker работал с тем же разрешением, что и мой текущий пользователь, учитывая, что контейнер монтирует папку хоста для выполнения задачи.

Я не являюсь пользователем root для своей хост-системы (локальной). Чтобы упростить себе жизнь, я также добавляю группу root, sudo в эту учетную запись образа Docker, чтобы я мог выполнять задачу sudo для установки вещей.

Вот часть Dockerfile:

(Убунту 18.04)

    ИМЯ ПОЛЬЗОВАТЕЛЯ = 'тест'
    ИДЕНТИФИКАТОР АРГ = 1000
    GID ARG=1000
    RUN apt-get update && apt-get install -yq openssh-server sudo
    RUN groupadd -g $GID группа отладки
    RUN useradd -rm -d /home/$USERNAME -s /bin/bash -u $UID -g $GID -G колесо $USERNAME
    ВЫПОЛНИТЬ эхо $USERNAME:test | chpasswd

Когда я создаю образ докера, я использую

docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) --build-arg USERNAME=$(whoami) .

передать мое имя пользователя и идентификатор пользователя

и когда я запускаю образ докера (для создания контейнера докера), я также использую

docker run --detach -u $(id -u):$(id -g)

Все хорошо до этого момента. Когда я использую «docker exec -it xxx bash» для входа в этот контейнер, мое имя пользователя правильное (бен), мой идентификатор пользователя правильный (10023). идентификатор -G показывает, что я нахожусь в 3 группах: 10001 (debuggroup), 0 (root), 27 (sudo) 10001 - мой настоящий идентификатор группы, если я побегу идентификатор -g в хосте.

А вот и изменение: В хосте, помимо группы 10001, я также являюсь членом группы 10022 и 10033, поэтому у меня есть разрешение на какую-то конкретную папку. Теперь в контейнере, т.к. пользователь не 10022, а 10033, я не могу зайти в эту папку.

Поэтому я изменил докер запустить команда:

docker run --detach -u $(id -u):$(id -g) $(id -G | sed -e 's/\</--group-add /g')

Это на самом деле работает, и теперь я могу получить доступ к своей папке. идентификатор -G показывает, что я нахожусь в 3 группах: 10001 (отладочная группа), 10022 (без имени), 10033 (без имени)

Но: Я больше не являюсь членом sudo и root. Самое интересное, кот /etc/группа показывает, что я все еще нахожусь в sudo и корневой группе, но у меня больше нет прав на sudo.

ben@a1559a984ac0:/$ grep ben /etc/group
корень:x:0:бен
судо: х: 27: бен
ben@a1559a984ac0:/$ судо лс
[sudo] пароль для Бена: 
Бена нет в файле sudoers. Об этом инциденте будет сообщено.

Есть несколько сообщений StackExchange, в которых говорится о несоответствии с группой, но я не вижу решения этой проблемы: моя учетная запись находится в /etc/group, но не в «группах» и «id -G». Почему " --group-add " докер запустить команда удаляет существующую группу, в которой я был?

Я думаю, что могу жестко закодировать " --group-add 0 ", чтобы добавить себя в корень, но это все еще разочаровывает (не элегантно). Любое предложение?

Файл докера предназначен для Ubuntu 18.04, но я думаю, что это не связано с версией.

Ben L avatar
флаг fr
Обновление: на самом деле я добавляю `--group-add sudo`, чтобы сделать учетную запись доступной для sudo. Но все же хочу знать, как решить проблему несоответствия.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.