2016-08-18 1 views
1

При установке громкости с помощью следующей команды:Как читать и писать на смонтированный том без запуска от имени root?

docker run -t -i --volumes-from FOO BAR 

объемы из FOO смонтированы с корнем в качестве владельца. Насколько я знаю, я не умею читать и писать. Должен ли я работать как root или есть какой-то другой способ?

Я попытался создать папку с другим владельцем перед монтажом, но установка, похоже, перезаписывает это.


Изменить: chown будет работать, если это может быть сделано автоматически после монтажа как-то.

+0

Можете ли вы изменить права собственности на файлы в исходном контейнере? – BMitch

+0

Здесь нет ничего особенного в докерах. Если вы хотите записать в каталог как непривилегированный пользователь, вам нужно использовать 'chown',' chgrp' и 'chmod' для установки соответствующих разрешений. – larsks

+0

Да, я понимаю, что работает 'chown'. Я на самом деле пробовал это с помощью 'docker exec -it ### bash', и он отлично работает. Но я не хочу делать это каждый раз. Файл является файлом базы данных, сгенерированным во время выполнения файла Docker, поэтому я не вижу, как его изменить, и как его изменить. Я думаю, что мне нужно, чтобы chown был вызван как root после того, как вещь «-volumes-from' появилась, но как это сделать? – jonalv

ответ

1

Я не знаю, почему вы не в состоянии изменить разрешения для папки в исходном изображении. Это работает без проблем в моей лаборатории:

$ cat df.vf-uid 
FROM busybox 

RUN mkdir -p /data && echo "hello world" > /data/hello && chown -R 1000 /data 

$ docker build -f df.vf-uid -t test-vf-uid . 
... 
Successfully built 41390b132940 

$ docker create --name test-vf-uid -v /data test-vf-uid 
e12df8f84a3b1f113ad5440b62552b40c4fd86f99eec44698af9163a7b960727 

$ docker run --volumes-from test-vf-uid -u 1000 -it --rm busybox /bin/sh 
/$ ls -al /data 
total 12 
drwxr-xr-x 2 1000  root   4096 Aug 22 11:44 . 
drwxr-xr-x 19 root  root   4096 Aug 22 11:45 .. 
-rw-r--r-- 1 1000  root   12 Aug 22 11:43 hello 
/$ echo "success" >/data/world 
/$ ls -al /data 
total 16 
drwxr-xr-x 2 1000  root   4096 Aug 22 11:46 . 
drwxr-xr-x 19 root  root   4096 Aug 22 11:45 .. 
-rw-r--r-- 1 1000  root   12 Aug 22 11:43 hello 
-rw-r--r-- 1 1000  root    8 Aug 22 11:46 world 
/$ cat /data/hello /data/world 
hello world 
success 
/$ exit 
+0

Я честно не понимаю, что вы делаете, похоже, похоже на мое решение, но если вы скажете, что это работы, я думаю, это так. :) – jonalv

+0

Файл докеров - две строки, с RUN, который изменяет UID папки/data. Я создаю и создаю контейнер (не обязательно его запускать). Затем я запускаю интерактивный контейнер в качестве UID 1000 с опцией '--volumes-from' и вижу, что/данные перечислены в UID 1000. – BMitch

+0

Это пыталось воспроизвести [ваш комментарий выше] (http://stackoverflow.com/ вопросы/39020093 /, как для чтения и записи к смонтированной-объема-без приработки как-корень/39078791? noredirect = 1 # comment65395179_39020093). Из моего тестирования Docker не сбросил права доступа к корневому каталогу в моем изображении, когда я его смонтировал. – BMitch

0

Итак, что я сделал, это установка тома в другой контейнер и изменение владельца (используя uid владельца, которого я хотел в окончательной настройке) из этого контейнера. Видимо, uid - это uid. Это означает, что я могу работать без корня в конечном контейнере. Возможно, есть более простые способы сделать это, но, похоже, это работает как минимум. Что-то вроде этого: (непроверенного кода клипа от моего окончательного решения)

docker run -v /opt/app --name Foo ubuntu /bin/bash 
docker run --rm --volumes-from Foo -v $(pwd):/FOO ubuntu bash -c "chown -R 9999 /opt/app" 
docker run -t -i --volumes-from FOO BAR 
Смежные вопросы