docker-compose + PostgreSQLでvolumeに失敗する時

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 によって設定されるラベルに対して変更を加えません。

実際の指定方法は、
このdocker-compose.ymlを参考にしてください。

WebAPI + Worker + Nginx + Redis + Postgresql 環境をDockerで

SElinuxをdisableにすりゃいいってことでもあるけどね。


じゃあね〜〜〜〜。