Как запустить команды docker run
и docker-compose up/run
, чтобы процесс внутри докера выполнялся пользователем с тем же uuid
, что и у моего локального пользователя?
Мне нужно сделать это такчто любые файлы, сгенерированные процессом "inside-docker", будут иметь права владения моего локального пользователя.
Для репликации:
Используйте контейнер alpine: 3.9 , смонтируйте том для записи и создайте файл.Предположим, что мое текущее имя пользователя user
.
mkdir output_dir #Create an output directory
docker run -it --rm --volume "/path/to/output_dir:/tmp" alpine:3.9 touch /tmp/file.txt
ls -la output_dir/file.txt
выдаст:
-rw-r--r-- 1 root root 0 Feb 7 19:51 /path/to/output_dir/file.txt
Это означает, что мне нужно sudo chown user:user /path/to/output_dir/file.txt
, чтобы иметь доступ в качестве текущего пользователя самостоятельнофайловая система.
Как мне сделать это без этого дополнительного шага?
Идея, которая приходит на ум:
Добавить Docker Entrypoint , который создастпользователь внутри контейнера с тем же uuid
, что и мой локальный пользователь, и выполнить любой код от имени этого пользователя.
docker-entrypoint.sh
#!/bin/sh
TEMP_UID="${TEMP_UID:-1000}"
set -ux
useradd -s /bin/false --no-create-home -u ${TEMP_UID} temp
#su-exec is an executable which makes it easy to run a process as a specific user.
exec su-exec temp $@
проблема в том, что мне придется вводить TEMP_UID=<user_id>
в качестве переменной среды в каждую команду docker run
или включать в мой файл docker-compose.yml
для каждой команды docker-compose up/run
.Если у Docker
есть внутренняя переменная, которая отслеживает uuid
пользователя, который ее запустил, я бы просто использовал это.Но я не могу найти такую внутреннюю переменную.
Любая помощь будет принята с благодарностью!