Docker: права доступа к файлу с --volume bind mount - PullRequest
0 голосов
/ 08 февраля 2020

Я следую инструкциям из: https://denibertovic.com/posts/handling-permissions-with-docker-volumes/, чтобы установить --volume bind mount в моем контейнере и создать пользователя в гостевом контейнере с тем же UID, что и у моего хост-пользователя - теория в том, что мой пользователь контейнера должен иметь доступ к монтированию. Это не работает для меня, и я ищу некоторые указатели, чтобы попробовать дальше.

Дополнительные сведения:

Мой Dockerfile начинается с альпийской базы и добавляет python dev-пакеты. Он копирует через точку входа. sh скрипт в соответствии с указаниями от denibertovi c. Затем он переходит к точке входа. sh script.

FROM alpine

RUN apk update
RUN apk add bash
RUN apk add python3
RUN apk add python3-dev
RUN apk add su-exec

COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x  /usr/local/bin/entrypoint.sh

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]

Сценарий entrpoint. sh добавляет пользователя в контейнер с UID, переданным в качестве переменной среды.

#!/bin/bash

# Add local user
# Either use the LOCAL_USER_ID if passed in at runtime or
# fallback

USER_ID=${LOCAL_USER_ID:-9001}

echo "Starting with UID : $USER_ID"
adduser -s /bin/bash -u $USER_ID -H -D user
export HOME=/home/user

su-exec user "$@"

Контейнер не создает проблем. Затем я запускаю его с помощью следующей командной строки:

sudo docker run -it -e LOCAL_USER_ID=`id -u` -v `realpath ../..`:/ws django-runtime /bin/bash

Вы увидите, что я передаю свой UID хоста, который сопоставляется с UID пользователя контейнера, и я прошу смонтировать привязку тома из моего локального рабочего каталога в точку монтирования / ws в контейнере.

Из оболочки bash внутри контейнера я вижу, что / ws принадлежит UID пользователя, совпадающему с моим собственным id. Однако, когда я go перечисляю содержимое / ws, я получаю сообщение об ошибке «Отказано в доступе» следующим образом:

[dleclair@localhost runtime]$ sudo docker run -it -e LOCAL_USER_ID=`id -u` -v `realpath ../..`:/ws django-runtime /bin/bash
[sudo] password for dleclair:
Starting with UID : 1000
bash-5.0$ id
uid=1000(user) gid=1000(user) groups=1000(user)
bash-5.0$ ls -la .
total 0
drwxr-xr-x    1 root     root            27 Feb  8 09:15 .
drwxr-xr-x    1 root     root            27 Feb  8 09:15 ..
-rwxr-xr-x    1 root     root             0 Feb  8 09:15 .dockerenv
drwxr-xr-x    1 root     root            18 Feb  8 07:44 bin
drwxr-xr-x    5 root     root           360 Feb  8 09:15 dev
drwxr-xr-x    1 root     root            91 Feb  8 09:15 etc
drwxr-xr-x    2 root     root             6 Jan 16 21:52 home
drwxr-xr-x    1 root     root            17 Jan 16 21:52 lib
drwxr-xr-x    5 root     root            44 Jan 16 21:52 media
drwxr-xr-x    2 root     root             6 Jan 16 21:52 mnt
drwxr-xr-x    2 root     root             6 Jan 16 21:52 opt
dr-xr-xr-x  119 root     root             0 Feb  8 09:15 proc
drwx------    2 root     root             6 Jan 16 21:52 root
drwxr-xr-x    1 root     root            21 Feb  8 07:44 run
drwxr-xr-x    1 root     root            21 Feb  8 08:22 sbin
drwxr-xr-x    2 root     root             6 Jan 16 21:52 srv
dr-xr-xr-x   13 root     root             0 Feb  8 01:58 sys
drwxrwxrwt    2 root     root             6 Jan 16 21:52 tmp
drwxr-xr-x    1 root     root            19 Feb  8 07:44 usr
drwxr-xr-x    1 root     root            19 Jan 16 21:52 var
drwxrwxr-x    5 user     user           111 Feb  8 02:15 ws
bash-5.0$
bash-5.0$
bash-5.0$ cd /ws
bash-5.0$ ls -la
ls: can't open '.': Permission denied
total 0
bash-5.0$

Оцените любые указатели, которые кто-либо может предложить. Спасибо!

1 Ответ

0 голосов
/ 09 февраля 2020

После дополнительного поиска я нашел ответ на мою проблему здесь: В доступе к каталогу хоста отказано в разрешении в Docker и здесь: http://www.projectatomic.io/blog/2015/06/using-volumes-with-docker-can-cause-problems-with-selinux/.

Короче говоря, проблема была с метками по умолчанию SE Linux для тома, монтирующими блокировку доступа к подключенным файлам. Решением было добавить трейлер ': Z' к аргументу командной строки -v, чтобы заставить docker установить соответствующие флаги для подключенных файлов, чтобы разрешить доступ.

Таким образом, командная строка стала:

sudo docker run -it -e LOCAL_USER_ID=`id -u` -v `realpath ../..`:/ws:Z django-runtime /bin/bash

Работает как шарм.

...