Рейтинг:0

Неверный ВЛАДЕЛЕЦ-ПОЛЬЗОВАТЕЛЬ в папке/файле: docker run -v :/ не работает для пользователя, определенного в Dockerfile

флаг in
AKS

Хост ОС: Выпуск Red Hat Enterprise Linux Server 7.9 (Майпо)

Гостевая ОС то есть запущенный контейнер Docker: OpenSuse 15.2

Докер-версия (на хосте): Докер версии 19.03.5, сборка 633a0ea

На хосте, когда я клонирую репозиторий «utilities_scripts», у меня есть действительный доступ для пользователя (из-за umask).

  • Я думаю, что проблема здесь не в разрешении, а в том, ПОЧЕМУ ПОЛЬЗОВАТЕЛЬ, определенный в файле Docker, не устанавливается в качестве владельца папок/файлов (которые монтируются) внутри контейнера докеров, когда я выдаю следующее докер работает... команда. Установка 755/775 и т. д. не вариант, так как я не могу указать внутри контейнера в качестве целевого пользователя докера, а установка 777 - плохая практика.

ПРИМЕЧАНИЕ:

  1. Когда я пробую тот же образ докера с другого компьютера с Linux, папка/файлы монтируются как пользователь "docker_non_root_user", который определен в Dockerfile как ПОЛЬЗОВАТЕЛЬ docker_non_root_user.
  2. сборка докера... успешно работает и создает образ, а контейнер работает на другой машине (когда я монтирую репозитории git clone внутри контейнера, используя -v <хост>:<контейнер> Синтаксис опции командной строки docker.

Фрагмент кода из Dockerfile:

# Определяем любые ссылки на точки монтирования
ТОМ ["/home/docker_non_root_user/git"]

ПОЛЬЗОВАТЕЛЬ docker_non_root_user
РАБОЧИЙ КАТАЛОГ /home/docker_non_root_user/git

Это то, что я вижу на хосте, где у меня есть Dockerfile ПОЛЬЗОВАТЕЛЬ ... вопрос собственности:

[gigauser@jenkins-projectABC bitbucket_workspace]$ whoami
гигаузер
[gigauser@jenkins-projectABC bitbucket_workspace]$ идентификатор
uid=gigauser(gigauser) gid=21520(jenkins) groups=21520(jenkins),3000(ectx)

[gigauser@jenkins-projectABC bitbucket_workspace]$ umask
0077
[gigauser@jenkins-projectABC bitbucket_workspace]$ ls -l
всего 12
drwx------ 5 gigauser jenkins 4096 3 февраля 16:36 утилиты_скрипты
[gigauser@jenkins-projectABC bitbucket_workspace]$


[gigauser@jenkins-projectABC bitbucket_workspace]$ sudo docker image ls
Пароль активного каталога:
ТЕГ РЕПОЗИТОРИЯ ИДЕНТИФИКАТОР ИЗОБРАЖЕНИЯ РАЗМЕР СОЗДАН
Project-im-opensuse 15.2 0c9ee31464cd 43 часа назад 2.39GB
[gigauser@jenkins-projectABC bitbucket_workspace]$

[gigauser@jenkins-projectABC bitbucket_workspace]$
[gigauser@jenkins-projectABC bitbucket_workspace]$ sudo docker run -v $PWD/utilities_scripts:/home/docker_non_root_user/git/utilities_scripts/ -it project-im-opensuse:15.2 bash -c "whoami; id; какой bash; bash - -версия; ls -l; эхо; ls -l утилиты_скрипты; ls -l /home/docker_non_root_user/git/utilities_scripts; id gigauser; echo"

ВНИМАНИЕ! Переадресация IPv4 отключена. Сеть работать не будет.


docker_non_root_user
uid=1000(docker_non_root_user) gid=487(docker_non_root_user) groups=487(docker_non_root_user),100(пользователи)

/бин/баш
GNU bash, версия 4.4.23(1)-выпуск (x86_64-suse-linux-gnu)
Авторское право (C) 2016 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версии 3 или выше <http://gnu.org/licenses/gpl.html>

Это бесплатное программное обеспечение; вы можете свободно изменять и распространять его.
НИКАКИХ ГАРАНТИЙ, насколько это разрешено законом.
всего 8
drwx------ 5 gigauser 21520 4096 4 фев 00:36 утилиты_скрипты

ls: невозможно открыть каталог 'utilities_scripts': разрешение отклонено
ls: невозможно открыть каталог '/home/docker_non_root_user/git/utilities_scripts': разрешение отклонено
id: 'gigauser': такого пользователя нет

[gigauser@jenkins-projectABC bitbucket_workspace]$

Когда я запускаю ту же команду на другом компьютере с Linux, я вижу утилиты_скрипты владелец папки docker_non_root_user.

Вопрос: ПОЧЕМУ Я вижу USER-ID пользователя хоста (где я запускаю докер запустить команда) устанавливается внутри контейнера докеров в папке утилиты_скрипты, когда такой идентификатор пользователя не был создан в Dockerfile/существует внутри контейнера? (см. 2-ю последнюю строку в приведенном выше выводе выше). В настоящее время он получает те же разрешения на уровне владельца хоста и папки внутри контейнера докеров.

гигаузер то есть пользователь хоста находится не в контейнере докеров, а в файле лс -л вывод показывает гигаузер является владельцем утилиты_скрипты папки/файлы в контейнере. Эта проблема не возникает на другом хост-компьютере.

я даже проверил /etc/subuid файл, выглядит нормально для меня. Изменение значения внутри пользователя докера не помогло. Также я не вижу ничего связанного с этим в /etc/докер/daemon.json файл.

$ кот /etc/subuid
гигаузер: 165536: 65536

Работает так же докер запустить .... параметры Команда выше с другого хост-компьютера Linux показывает владение папкой внутри контейнера докеров как:

drwx------ 5 docker_non_root_user 1000 272 26 января 21:52 утилиты_скрипты
Рейтинг:0
флаг cn

Я не совсем уверен, что понимаю ваш вопрос, так как он мне немного неясен. Но из того, что я могу понять:

Твой гигаузер числовой идентификатор не 1000, похоже может быть 21520. Это работает на другом хосте, потому что ваш локальный пользователь, вероятно, имеет числовой идентификатор. 1000.

Вы видите идентификатор пользователя хоста, потому что вы монтируете папку, а не копируете ее. Когда вы монтируете его, он передается в контейнер с точно такими же разрешениями/идентификаторами, которые установлены на хосте, потому что он находится на хосте. Контейнеры не похожи на виртуальные машины с полностью отдельными ресурсами, и даже на виртуальной машине, если вы смонтируете что-то вроде каталога NFS, вы получите числовые идентификаторы, которые могут совпадать или не совпадать с вашими локальными идентификаторами.

С использованием /etc/subuid требует передачи флага команде запуска, и вам придется выполнять математические расчеты, чтобы вычислить смещения для вашего пользователя.

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

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