LoginSignup
3
2

More than 5 years have passed since last update.

Jenkinsのビルド環境にDockerを使ったらJenkinsとコンテナでファイル共有できなかったので悲しかった

Posted at

問題

ホストOS
$ docker run -d -v /path/from/host:/path/to/docker:ro test
$ ls -al /path/from/host
total 4
drwxr-xr-x. 2 500     500      45 Dec 25 16:26 .
drwxr-xr-x. 3 jenkins jenkins  19 Dec 25 16:26 ..
コンテナ
$ ls -al /path/to/docker/
drwxr-xr-x. 2 defaultuser defaultuser  45 Dec 25 16:26 .
drwxr-xr-x. 3 root        root         19 Dec 25 16:26 ..

・・・記憶があいまいなので正確ではないかもしれませんが、こんな感じだったと思います。
共有フォルダの所有者が、ホスト側とコンテナ側で一致しない(し、そもそもそんなユーザーがいない)という現象が起きてしまって、共有なのに相互に書き込めないということになってしまいました。

コンテナ側のユーザーにはsudoを持たせればなんとでもなりますが、ホスト側のJenkinsユーザーには安易にsudoを持たせたくなかったので、なんとかならないかと思っていました。

解決?

uidを合わせればよさそう

ホストOS
groupadd -g 1200 docker
useradd jenkins -M -u 1250 -G docker
Dockerfile
RUN usermod -u 1250 projects && \
    gid=`id -g projects` && \
    groupmod -g 1250 projects && \
    find /home/projects -gid $gid -exec chgrp projects {} \;
  • ※ホスト側ではDockerもJenkinsもインストールする前に1200番と1250番(数字は適当)でユーザー作成しておきます。
  • ※コンテナは既存のImageを使用することを前提にしていますので、ファイル共有が必要なユーザー(ここではprojects)にホストのJenkinsユーザーと同じIDを付与し、ホームディレクトリ以下の権限を変更します。
  • ※ホームディレクトリ以下のuidは勝手に変更されるようです。
  • ※ホームディレクトリ以外を共有する場合は別途uidとgidの変更が必要です。

確認

ホスト
$ ls -al /var/lib/jenkins/jobs/test/workspace/docker
total 4
drwxrwxr-x. 2 jenkins jenkins  45 Dec 25 16:26 .
drwxr-xr-x. 3 jenkins jenkins  19 Dec 25 16:26 ..
-rw-rw-r--. 1 jenkins jenkins   0 Dec 25 16:26 id_rsa
コンテナ
$ ls -al /home/projects/jenkins
total 4
drwxrwxr-x. 2 projects projects  45 Dec 25 16:26 .
drwxr-xr-x. 3 root     root      19 Dec 25 16:26 ..
-rw-rw-r--. 1 projects projects   0 Dec 25 16:26 id_rsa

これで、Jenkinsからもコンテナからも自由に書き込みできるようになりました。
しばらくこれで使ってみます。
めでたし

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2