Docker без рута: в разрешении отказано при записи файлов на монтирование тома без sudo

Я не могу писать на смонтированный том, находясь в моем контейнере (через ssh) без разрешений sudo. Смонтированная папка - это домашняя папка пользователя хоста на хосте. Я запускаю демон-докер без рута.

Я сделал следующие шаги, чтобы запустить контейнер:

  1. Я установил докер без root, следуя инструкциям на https://docs.docker.com/engine/security/rootless/

  2. Создайте Dockerfile (ниже) с помощью этой команды:

    docker build --build-arg USER_ID=$(id -u) --build-arg GROUP_ID=$(id -g) --build-arg USER_NAME=user - build-arg USER_PASS=user -t test.

  3. Запустил контейнер с помощью команды:

    docker run -d --name test_container -p 50000:22 -v /home / $(id -u -n): / mnt / home test

  4. Ssh'd в мой контейнер через

    Пользователь ssh @localhost -p 50000

Когда я создаю файл в своем домашнем каталоге, мне отказывают в разрешении. Когда я создаю новую папку на своем хосте и изменяю ее на 777; то я могу создавать файлы, но они не отображаются на моем исходном хосте с правильным пользователем / группой, вместо этого я получаю что-то вроде:

      drwxrwxrwx  6 gdekkers gdekkers 4096 May 25 21:10 .
drwxr-xr-x 14 gdekkers gdekkers 4096 May 25 21:10 ..
drwxrwxrwx  3 gdekkers gdekkers 4096 Apr 30 13:01 SomeFolder
drwxr-xr-x  2   100999   100999 4096 May 25 21:08 test
drwxr-xr-x  2   100999   100999 4096 May 25 21:10 test2

что неудобно, так как мне нужно периодически применять чавн. Похоже, это связано с пространствами имен, которые использует Docker без root-прав. Как я могу убедиться, что созданные файлы соответствуют пользователю на моем хосте?

Dockerfile:

      FROM nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.04

# Input arguments
ARG USER_ID
ARG GROUP_ID
ARG USER_NAME
ARG USER_PASS

# environment variables
ARG DEBIAN_FRONTEND="noninteractive"
ENV TZ Europe/Belgium

# Install some basic utilities and clean up
RUN apt-get update && apt-get install -y \
    nano \
    ca-certificates \
    sudo \
    libx11-6 \
    openssh-server \
 && rm -rf /var/lib/apt/lists/*

# Create a sudo user
RUN groupadd --gid $GROUP_ID user
RUN useradd -rm -d /home/$USER_NAME -s /bin/bash --uid $USER_ID --gid $GROUP_ID -G sudo $USER_NAME
RUN usermod -aG sudo $USER_NAME
RUN echo $USER_NAME:$USER_PASS | chpasswd

# Start ssh service
RUN service ssh start
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]

Спасибо!

1 ответ

Недавно я столкнулся с подобными проблемами при работе над собственными проектами. Это вызвано разным сопоставлением UID/GID при использовании Docker без root-доступа.

В моем блоге недавно появилась статья, в которой подробно описывается, как бороться с проблемами Docker без root-прав, такими как проблемы «Отказано в разрешениях» . ACL наследования на хосте являются жизнеспособным решением (как также упоминалось в этой теме StackOverflow ):

Начните с установкиaclпакет, если он у вас еще не установлен:

       sudo apt install acl

Тогда давайте всегда позволяемrwXразрешения для текущих и будущих файлов для пользователяubuntu:

       sudo setfacl -Rm d:u:ubuntu:rwX,u:ubuntu:rwX ./data

(пример выше предполагает, что монтирование привязки Docker является дочерним элементом./data)

Другие вопросы по тегам