walkingmask’s development log

IT系の情報などを適当に書いていきます

MENU

Docker Volume としてマウントしたディレクトリでのファイル作成時の所有権問題

問題

Docker に Volume としてマウントしたホスト上のディレクトリに、コンテナ側からファイルを作成すると所有者やグループが root になってたりします。

user@host ~ % sudo docker run -v ~/Directory:/Directory -it image:latest /bin/bash    # ホストのディレクトリをコンテナにマウント
root@abc123456:~$ mkdir /Directory/test
root@abc123456:~$ exit
user@host ~ % ls -al ~/Directory
drwxr-xr-x  5 root root 4096  1月  1 01:01 test

これだと、コンテナ上のサービスから作成したディレクトリなどを、ホスト OS からいじるために、毎回 sudo などする必要があります。

ボリュームコンテナを作ればいい話かもしれませんが、諸事情でどうしてもホストのディレクトリを使いたかったのです。

解決策

色々と試行錯誤しましたが、「コンテナ上で操作する UID、GID をホストと同じにする」しか解決法を見つけられませんでした。具体的には、

  • ホスト側と同じ GID のグループを作成
  • ホスト側と同じ UID、GID でユーザ作成
  • sudo をパスワードなしで使えるように
  • run するときに -u added_user を指定
# Dockerfile にて
RUN groupadd added_user -g 1000 && \
  useradd added_user -m -u 1000 -g 1000 && \
  echo "%added_user ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers.d/added_user

# runの時
sudo docker run -v ~/Directory:/Directory -u added_user -it image:latest /bin/bash

まとめ

そもそも、なぜマウントしたディレクトリにホストユーザ以外で書き込む仕様になっているのか。