dockerでPostgreSQLのログをDataVolumeに吐きたい

postgresql.confでログを/var/log/pgsqlに吐くように設定する。
そして -v /var/log/pgsql:/var/log/pgsql でホストのディレクトリをマウントさせると、ログ出力でPermission deniedと言われてコンテナがこける。


調べてみるとマウントしたディレクトリはゲスト側では UID=1000, GID=1000 になり、UIDが1000のユーザかrootしか書き込めなくなるとのことだったが、今回の場合は所有者が root:root になっており、どうも話が違う。
色々悩んだ末に、ホスト側の所有者を root ではなく適当な一般ユーザーにしすると、ゲスト側で UID=1000, GID=1000 になることがわかった。


あとはpostgresのUID/GIDを1000にするようDockerfileに書いておけば、ログをDataVolumeに吐くことができる。
1つ注意が必要なのは、yumとかでPostgreSQLをインストールする前にユーザーとグループを作っておかなければならないこと。
インストール後に変更すると、usermod/groupmodでは既存のpostgres所有のファイルまではUID/GIDが変更されないため、また別のところでPermission deniedと言われてしまう。