Docker создает файлы как root в установленном томе
Я использую Docker (1.3.1) для создания RPM внутри контейнера:
docker run -v /home/matt/build:/build build-rpm /build/build-pkg.sh
Это отлично работает (мой пользователь находится в группе docker
, поэтому мне не нужно sudo) и отбрасывает завершенный .rpm
файл в текущем каталоге. Проблема в том, что файл создается как принадлежащий root.
Как я могу организовать его так, чтобы файл был создан тем же пользователем, что и я запускал docker с?
Ответы
Ответ 1
Вы можете попытаться создать (в Dockerfile пользовательского изображения) пользователя и установить его как та, которая используется контейнером
RUN adduser --system --group --shell /bin/sh auser \
&& mkdir /home/auser/bin
USER auser
Затем проверьте, поддерживает ли docker run -v /home/matt/build:/build build-rpm
общую папку в /build как auser
.
Другой вариант, упомянутый в вопрос 2259:
Если вы chown
тома (на стороне хоста) до его привязки, он будет работать.
В этом случае вы можете сделать:
mkdir /tmp/www
chown 101:101 /tmp/www
docker run -v /tmp/www:/var/www ubuntu stat -c "%U %G" /var/www
(Предполагая, что 101:101
является UID:GID
пользователя www-data
в вашем контейнере.)
Ответ 2
Docker работает под управлением root и не знает, что ваш пользователь находится внутри своей виртуальной среды (даже если вы находитесь в группе sudoers). Но вы можете создать пользователя без полномочий root, создавая образ своего докера, который можно назвать любым, что вам нравится.
# create a non-root user named tester,
# give them the password "tester" put them in the sudo group
RUN useradd -d /home/tester -m -s /bin/bash tester && echo "tester:tester" | chpasswd && adduser tester sudo
# start working in the "tester" home directory
WORKDIR /home/tester
COPY ./src
# Make the files owned by tester
RUN chown -R tester:tester /home/tester
# Switch to your new user in the docker image
USER tester