2015-02-06 3 views
4

Я использую Docker 1.4.1 на Ubuntu 14.04.1 LTS с ядром 3.13.0-4.Невозможно изменить владельца каталога тонера Docker для пользователя без полномочий root

Рассмотрим следующий пример Dockerfile

FROM debian:wheezy 

VOLUME /var/myvol 
# RUN mkdir /var/myvol 

# copy content to volume 
ADD foo /var/myvol/foo 
# create user, and make it new owner of directory 
RUN useradd nonroot \ 
    && chown -R nonroot:nonroot /var/myvol/ \ 
    && ls -al /var/myvol 
# switch to new user 
USER nonroot 
# remove directory owned by user 
RUN ls -al /var/myvol && rm /var/myvol/foo && ls -al /var/myvol 

и построить его с

touch foo 
docker build -t test . 

затем полученный выход

Step 0 : FROM debian:wheezy 
---> c90d655b99b2 
Step 1 : VOLUME /var/myvol 
---> Running in d3bc83df9451 
---> b860e18186d8 
Removing intermediate container d3bc83df9451 
Step 2 : ADD foo /var/myvol/foo 
---> aded36dba841 
Removing intermediate container db5dd1b08958 
Step 3 : RUN useradd nonroot  && chown -R nonroot:nonroot /var/myvol/  && ls -al /var/myvol 
---> Running in 148941cb7858 
total 8 
drwxr-xr-x 2 nonroot nonroot 4096 Feb 6 09:55 . 
drwxr-xr-x 13 root root 4096 Feb 6 09:55 .. 
-rw-rw-r-- 1 nonroot nonroot 0 Feb 6 09:30 foo 
---> 144e4ff90439 
Removing intermediate container 148941cb7858 
Step 4 : USER nonroot 
---> Running in 924f317b6718 
---> 345c1586c69f 
Removing intermediate container 924f317b6718 
Step 5 : RUN ls -al /var/myvol && rm /var/myvol/foo && ls -al /var/myvol 
---> Running in 16c8c2349f27 
total 8 
drwxr-xr-x 2 root root 4096 Feb 6 09:55 . 
drwxr-xr-x 13 root root 4096 Feb 6 09:55 .. 
-rw-rw-r-- 1 root root 0 Feb 6 09:30 foo 
rm: cannot remove `/var/myvol/foo': Permission denied 
INFO[0000] The command [/bin/sh -c ls -al /var/myvol && rm /var/myvol/foo && ls -al /var/myvol] returned a non-zero code: 1 

Если бы я заменить строку VOLUME с комментариями одного ниже, он работает отлично. Что действительно странно, так это вывод ls -al: в то время как первый говорит, что владелец был nonroot, второй выводит владельца как корень, поэтому команда chown кажется как-то отброшена или разрешения сброшены после переключения на новый пользователь.

Я понимаю точные объемы докеров? Разрешено ли только root разрешать работать с ними, или это может быть ошибка, о которой я должен сообщить?

[Редактировать]

То, что я хочу добиться того, чтобы использовать объем, хранение данных для контейнерной службы. Эта служба не требуется для запуска от имени root (и поэтому я бы предпочел использовать пользователя без полномочий root), но -, необходимый для удаления каталогов и файлов, которые больше не нужны.

ответ

5

Когда вы объявляете каталог как VOLUME, вы фактически не можете использовать его в Dockerfile. Основная причина заключается в том, что тома настраиваются, когда контейнер запущен, а не построен.

В этом случае вы можете просто переместить оператор VOLUME в конец файла Docker. Любые данные в изображении в этом каталоге будут скопированы в том, когда контейнер запущен.