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?
2 ответа
Вы можете попытаться создать (в 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
пользователь в вашем контейнере.)
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