hotch-potch, Note to self

いろいろ作業記録

macOSでPostgreSQLのコンテナが立ち上がらない

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)が立ち上がってない。

f:id:hotch-potch:20211027141922p:plain

  • PostgreSQLのコンテナのコンソールを見てみる。
    • 'could not create directory'などのエラーメッセージが出てる。
    • 実際のホスト側のディレクトリはからっぽのまま。
    • パーミッション777にしても状況変わらず。

f:id:hotch-potch:20211027142112p:plain

  • dockerを再起動

f:id:hotch-potch:20211027142359p:plain

  • 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ファイルに従って、テーブルの初期化もできてる。

f:id:hotch-potch:20211027142555p:plain

f:id:hotch-potch:20211027142634p:plain

4.気になった点

  1. Ubuntu + Docker でPostgreSQLを立ち上げると、-vオプションで接続したdataディレクトリのパーミッション・オーナー・グループが自動的に変わる。(パーミッション700、postgresユーザ)

  2. macOS + Docker でPostgreSQLを立ち上げると、もともと作成したユーザのまま・パーミッションも変わってない。(正常に立ち上がった時でも変わらない)

というところで、パーミッションの制御がうまくいってないのかな?

ハマる前に、dockerの再起動をしてください!