docker-composeを使用して開発するとデータベースもdocker-composeで管理すると思います。
特に開発時ではそうでしょう。
基本的に公式が用意しているdocker imageを使用すると思いますが、
PostgreSQLの場合、volumeマウント、データの永続化をしようとすると
「うまく行かない」ってことがあるかと思います。
多くの場合、permission denied、マウントするディレクトリの所有者権限で
エラーになるorマウントされないケースだと思います。
ユーザーがpostgreだったりrootだったりvagrantだったり意外と
どこを見ればいいのかわからず大変。
chownすればいいとか、build時に書き換えたりentorypoint指定して対応したり。。。
解決策を先に。
z フラグを追加
docker-compose.ymlのvolume指定時に
zフラグを追加するだけです。
dockerではSELinuxのようなラベリング・システムに対応しています。
zまたはZフラグを指定すると、dockerに対して共有ボリュームが再度ラベル付けされたものであると伝えてくれます。
SELinux のようなラベリング・システムでは、コンテナ内にマウントされたボリュームの内容に対しても、適切なラベル付けが行われます。ラベルがなければ、コンテナの中の内容物を使って実行しようとしても、セキュリティ・システムがプロセスの実行を妨げるでしょう。標準では、Docker は OS によって設定されるラベルに対して変更を加えません。
1 2 |
volumes: - /tmp/postgresql-data:/var/lib/postgresql/data:z |
実際の指定方法は、
このdocker-compose.ymlを参考にしてください。
SElinuxをdisableにすりゃいいってことでもあるけどね。
じゃあね〜〜〜〜。