DockerでSambaサーバを立てるためにdperson/sambaを利用し、かつローカルのフォルダをマッピングすることで永続化させているとき、SMB経由で作成・編集したファイルの、オーナー情報・グループ情報が自身のアカウントと全然関係ないものになるときの対処方法メモ
(sambaサーバとしては動作に問題ないけど、ファイルの書き込みの有無によって元のオーナー・変なオーナーとバラバラになって気持ち悪い。)
原因は「コンテナ内のSambaユーザ」と「Dockerホスト側のID情報」が紐づいていないのが原因。このページの説明が判りやすかった。
「Dockerホスト側の紐づけたいアカウント」の情報を「コンテナ内のSambaユーザ」の情報として扱うようにしてSambaサーバを作成すれば解決する。
dperson/sambaの場合、環境変数によりuid/gidを引き継げるので、まずはホスト側で紐づけたいアカウントのuid/gidを確認
pi@ubuntu:~$ id
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lxd)
uid/gidが判れば、docker起動時のパラメータに追加する。
修正前(一部省略)
sudo docker run --name samba --restart=always -p 139:139 -p 445:445 -v /home/pi/share:/mnt/pub -d dperson/samba -s "share;/mnt/pub;yes;no;yes"
修正後
sudo docker run -e USERID=1000 -e GROUPID=1000 --name samba --restart=always -p 139:139 -p 445:445 -v /home/pi/share:/mnt/pub -d dperson/samba -s "share;/mnt/pub;yes;no;yes"