1.はじめに
macのDocker上で、PostgreSQLのコンテナを立ち上げ、かつdetaディレクトリを永続化(-vオプションでホスト側のディレクトリにマウント)した際に、起動失敗する例があったので、覚書。
(Ununtu Linux 20.04ではこの現象は起きない。Windows版は未確認)
2.結論
dockerを再起動して、すぐにdocker-compose up
すること。
(-v で接続した、ホスト側(macOS)のディレクトリのパーミッションが、コンテナ内(PostgreSQL)からうまく制御できてなさそう・・・)
環境
M1 Mac上で、dockerを動かしてます。dockerはM1 Mac対応版です。
$ uname -a Darwin mmac.local 20.6.0 Darwin Kernel Version 20.6.0: Mon Aug 30 06:12:20 PDT 2021; root:xnu-7195.141.6~3/RELEASE_ARM64_T8101 arm64 $ docker --version Docker version 20.10.8, build 3967b7d $ docker-compose --version Docker Compose version v2.0.0
PostgreSQLのバージョン、10.18、12.8 の両方で発生。
3.状況
- docker composeでコンテナを立ち上げる。
$ docker-compose up -d [+] Running 4/4 ⠿ Network d4c_d4c_v210 Created 0.0s ⠿ Volume "d4c_postgres" Created 0.0s ⠿ Container d4c_v210_db Started 3.5s ⠿ Container d4c_v210_app Started 4.3s
- PostgreSQLのコンテナ(d4c_v210_db)が立ち上がってない。
- PostgreSQLのコンテナのコンソールを見てみる。
- dockerを再起動
- docker composeでもう一度コンテナを立ち上げる。
$ docker-compose up -d [+] Running 4/4 ⠿ Network d4c_d4c_v210 Created 0.0s ⠿ Volume "d4c_postgres" Created 0.0s ⠿ Container d4c_v210_db Started 3.5s ⠿ Container d4c_v210_app Started 4.3s
- 今度は立ち上がった。initdbに配置したSQLファイルに従って、テーブルの初期化もできてる。
4.気になった点
Ubuntu + Docker でPostgreSQLを立ち上げると、-vオプションで接続したdataディレクトリのパーミッション・オーナー・グループが自動的に変わる。(パーミッション700、postgresユーザ)
macOS + Docker でPostgreSQLを立ち上げると、もともと作成したユーザのまま・パーミッションも変わってない。(正常に立ち上がった時でも変わらない)
というところで、パーミッションの制御がうまくいってないのかな?
ハマる前に、dockerの再起動をしてください!