В докере файлы, созданные внутри контейнеров, как правило, имеют непредсказуемое владение при проверке их с хоста. Владельцем файлов на томе является root (uid 0) по умолчанию, но как только учетные записи пользователей, не принадлежащие root, участвуют в контейнере и записываются в файловую систему, владельцы становятся более или менее случайными с точки зрения хоста.
Это проблема, когда вам необходимо получить доступ к данным тома с хоста, используя ту же учетную запись пользователя, которая вызывает команды докера.
Типичные обходные пути
- принуждение пользователей uID во время создания файлов Dockerfiles (не переносимых)
- передача UID хост-пользователя команде
docker run
в качестве переменной среды, а затем запуск некоторых командchown
на томах в точке входа script.
Оба этих решения могут дать некоторый контроль над фактическими разрешениями за пределами контейнера.
Я ожидал, что пространство имен пользователей станет окончательным решением этой проблемы. Я провел несколько тестов с недавно выпущенной версией 1.10 и --userns-remap установлен на мою учетную запись рабочего стола. Тем не менее, я не уверен, что это может облегчить работу с файлами на смонтированных томах, я боюсь, что это может быть наоборот.
Предположим, что я запускаю этот базовый контейнер
docker run -ti -v /data debian:jessie /bin/bash
echo 'hello' > /data/test.txt
exit
Затем проверьте содержимое с хоста:
ls -lh /var/lib/docker/100000.100000/volumes/<some-id>/_data/
-rw-r--r-- 1 100000 100000 6 Feb 8 19:43 test.txt
Этот номер "100000" является суб-идентификатором моего хост-пользователя, но поскольку он не соответствует моему пользовательскому UID, я все равно не могу редактировать test.txt без привилегий. Этот подпользователь, похоже, не имеет никакого отношения к моему фактическому постоянному пользователю за пределами докера. Он не отображается назад.
Обходные пути, упомянутые ранее в этом сообщении, которые состоят в выравнивании UID между хостом и контейнером, больше не работают из-за сопоставления UID->sub-UID
, которое происходит в пространстве имен.
Затем, есть ли способ запустить докер с включенным пространством имен пользователей (для повышения безопасности), но при этом все еще позволяя хост-пользователю, работающему с докером, владеть файлами, созданными на томах?