Разрешения — Использование Docker С Пользователями Оставляет Файлы, Принадлежащие Subuid/Subgid.

  • Автор темы 86037872
  • Обновлено
  • 21, Oct 2024
  • #1

Фон

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

Вместо бега

 root 
or whatever, people will then use a wrapper/shim script similar to:

root:root

Это работает великолепно, но...

Проблема

Очевидно, если я остановлюсь на этом, то файлы, созданные nobody:nobdy running inside the container will be ending up belonging to chmod 777 на хосте. Понятно, почему это происходит, и как и ожидалось.

Следовательно, я включил пользовательские пространства имен для демона докера. Это тоже отлично работает. Мой хост-пользователь имеет UID 1000 и субидентификатор 493216.

Если я запущу docker-xyz-shim в каталоге (на хосте), принадлежащем 1000, и если этот контейнер начнет создавать файлы, сначала я ожидал, что они окажутся принадлежащими 1000 на хосте. (т. е. прямое и обратное отображение).

Но, о чудо, они принадлежат 493216, т. е. принадлежат субуиду, а не хосту uid. Происходит только прямое сопоставление (от хоста-uid к суб-uid, обратное отображение от суб-uid ​​к хост-uid отсутствует).

Я понимаю, почему это так, и что это работает так, как задумано. Во-первых, здесь задействовано сопоставление 1:n, и было бы нетривиально сопоставить потенциальный суб-идентификатор 65536 обратно с одним хост-uid. Это позволяет нам делать все, что было бы практично в других случаях использования. Но в моем конкретном случае я действительно хочу, чтобы файлы имели номер 1000 на хосте.

Могу ли я что-нибудь с этим поделать?

Что я пробовал

Я добавил пользователя хоста 493216 в группу хостов 1000 и установил nobody:nobody permissions. If I do a su - 493216 на хосте я теперь могу редактировать файлы, принадлежащие 1000. Но изнутри контейнера показано, что файлы принадлежат g+rwx and I can read them, but not write them.

Я могу создавать новые файлы внутри контейнера, если сделаю root:root on a directory on the host (it then belongs to xyz с разрешениями 777 в контейнере), и в конечном итоге они принадлежат docker run -ti --rm \ -v $PWD:/workdir \ -v $HOME/.ssh:/root/.ssh \ dockerizedxyz "$@" in the container (fine) and to 493216:493216 on the host (to be expected after all this).

РЕДАКТИРОВАТЬ: заменил «git» на «xyz», речь идет вовсе не о git, а о том, как изменять файлы хоста изнутри контейнера докеров без необходимости /usr/bin/xyz on the host.

#docker #permissions #пространства имен пользователей

86037872


Рег
18 Oct, 2007

Тем
57

Постов
206

Баллов
501
  • 25, Oct 2024
  • #2
 docker run -ti --rm \

-v $PWD:/workdir \

-v $HOME/.ssh:/root/.ssh \

--user $(id -u):$(id -g) \

dockerizedxyz "$@"
 

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

 

VWolf


Рег
16 May, 2014

Тем
68

Постов
192

Баллов
542
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно