Подтвердить что ты не робот

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 с?

4b9b3361

Ответ 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