web-dev-qa-db-ja.com

Dockerはマウントされたボリュームにルートとしてファイルを作成します

Docker(1.3.1)を使用して、コンテナー内にRPMを構築しています。

docker run -v /home/matt/build:/build build-rpm /build/build-pkg.sh

これは正常に機能し(私のユーザーはdockerグループに属しているため、Sudoは不要です)、完了した.rpm現在のディレクトリ内のファイル。問題は、ファイルがルートによって所有されているように作成されることです。

Dockerを実行するのと同じユーザーが所有するファイルが作成されるように、どうすれば調整できますか?

27
Matt R

(カスタムイメージの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としてマウントします。


issue 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:GIDwww-dataコンテナ内のユーザー。

5
VonC

Dockerはrootとして実行され、ユーザーがその仮想環境内にいるかはわかりません(たとえsudoersグループに属している場合でも)。ただし、任意の名前で呼び出すことができるドッカーイメージを作成しながら、非ルートユーザーを作成できます。

# 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
1
Paul Oliver