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
Другие вопросы по тегам