Я создал 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, но я думаю, что это не связано с версией.