У docker файли, створені всередині контейнерів, мають непередбачуване право власності під час перевірки їх із хосту. Власником файлів на томі за замовчуванням є root (uid 0), але як тільки некореневі облікові записи користувачів беруть участь у контейнері та записують у файлову систему, власники стають більш-менш випадковими з точки зору хоста.
Проблема полягає в тому, що вам потрібно отримати доступ до даних обсягу з хосту, використовуючи той самий обліковий запис користувача, який викликає команди докера.
Типовими обхідними шляхами є
- примушування користувацьких ідентифікаторів під час створення в 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, володіти файлами, створеними на томах?