ぱっそ あ ぱっそ

個人的なメモをだらだらと。無保証。記事は随時書き直しています。

dperson/sambaでユーザ情報を一致させる方法

DockerでSambaサーバを立てるためにdperson/sambaを利用し、かつローカルのフォルダをマッピングすることで永続化させているとき、SMB経由で作成・編集したファイルの、オーナー情報・グループ情報が自身のアカウントと全然関係ないものになるときの対処方法メモ
(sambaサーバとしては動作に問題ないけど、ファイルの書き込みの有無によって元のオーナー・変なオーナーとバラバラになって気持ち悪い。)

原因は「コンテナ内のSambaユーザ」と「Dockerホスト側のID情報」が紐づいていないのが原因。このページの説明が判りやすかった。

blog.amedama.jp

「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"