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 をホストと同じにする」しか解決法を見つけられませんでした。具体的には、
# 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