- 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 #пространства имен пользователей