Я думаю, что вы можете установить Docker пользователя при запуске вашего контейнера
Вы можете запустить (в этом примере - образ Ubuntu) с явным идентификатором пользователя и идентификатором группы.
$ docker run -it --rm \
--mount "type=bind,src=$(pwd)/shared,dst=/opt/shared" \
--workdir /opt/shared \
--user "$(id -u):$(id -g)" \
ubuntu bash
Разница в '–user “$ (id -u): $ (id -g)« »- они сообщают контейнеру, что он должен работать с текущим идентификатором пользователя и идентификатором группы, которые динамически получаются путем подстановки команды bash запустить «id -u» и «id -g» и передать их значения.
Это может быть уже достаточно хорошо. Проблема в том, что пользователь и группа на самом деле не существуют в контейнере. Этот подход работает для команды терминала, но сеанс выглядит прерванным, и вы увидите несколько уродливых сообщений об ошибках, таких как:
"groups: cannot find name for group ID"
"I have no name!"
- your container, complaining
Пока работает bash, некоторые приложения могут отказаться от запуска, если эти конфиги выглядят подозрительно .
Далее вам нужно правильно настроить и запустить контейнеры Docker, чтобы вам не приходилось бороться с ошибками прав доступа и легко получать доступ к вашим файлам.
Поскольку вы должны создавать не root Пользователь в вашем Dockerfile в любом случае, это хорошая вещь. Вы также можете явно указать идентификатор пользователя и идентификатор группы.
Ниже приведен минимальный Dockerfile, который ожидает получения аргументов во время сборки и создает нового пользователя с именем «user»:
FROM ubuntu
ARG USER_ID
ARG GROUP_ID
RUN addgroup --gid $GROUP_ID user
RUN adduser --disabled-password --gecos '' --uid $USER_ID --gid $GROUP_ID user
USER user
Взгляните: add-user-to-container .
Вы можете использовать этот Dockerfile для создания образа fre sh с использованием uid и gid хоста. Этот образ должен быть создан специально для каждой машины, на которой он будет работать, чтобы убедиться, что все в порядке.
Затем вы можете запустить использовать этот образ для нашей команды. Идентификатор пользователя и идентификатор группы являются правильными без необходимости их указания при запуске контейнера.
$ docker build -t your-image \
--build-arg USER_ID=$(id -u) \
--build-arg GROUP_ID=$(id -g) .
$ docker run -it --rm \
--mount "type=bind,src=$(pwd)/shared,dst=/opt/shared" \
--workdir /opt/shared \
your-image bash
Нет необходимости использовать «chown», и вы избавитесь от назойливых ошибок прав доступа. Пожалуйста, взгляните на эту очень интересную статью: kubernetes-management- docker, docker -shared-permissions .