Docker и --userns-remap, как управлять разрешениями для томов для обмена данными между хостом и контейнером?

В докере файлы, созданные внутри контейнеров, обычно имеют непредсказуемое владение при проверке их с хоста. По умолчанию владельцем файлов на томе является пользователь root (uid 0), но как только учетные записи пользователей без полномочий root включаются в контейнер и производят запись в файловую систему, владельцы становятся более или менее случайными с точки зрения хоста.

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

Типичные обходные пути

форсирование пользовательских идентификаторов пользователя во время создания в Dockerfiles (непереносимо)передача UID пользователя хостаdocker run команда в качестве переменной среды, а затем запустить некоторыеchown Команды на томах в сценарии точки входа.

Оба эти решения могут дать некоторый контроль над фактическими разрешениями вне контейнера.

Я ожидал, что пространства имен пользователей станут окончательным решением этой проблемы. Я провел несколько тестов с недавно выпущенной версией 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 моего хост-пользователя, но, поскольку оно не соответствует UID моего пользователя, я все равно не могу редактировать test.txt без привилегий. Этот субпользователь, похоже, не имеет никакого отношения к моему действительному обычному пользователю за пределами докера. Это не отображается обратно.

Обходные пути, упомянутые ранее в этом посте и состоящие в выравнивании UID между хостом и контейнером, больше не работают из-заUID->sub-UID отображение, которое происходит в пространстве имен.

Затем, есть ли способ запустить docker с включенным пространством имен пользователя (для повышения безопасности), и в то же время дать возможность хост-пользователю, выполняющему docker, владеть файлами, сгенерированными на томах?

Ответы на вопрос(3)

Ваш ответ на вопрос