元のcommand
をオーバーライドしています このスクリプトではpostgresを開始しないため、データベースを利用できません。
データベースの初期化をコンテナのエントリポイントディレクトリに配置できます:/docker-entrypoint-initdb.d
。これにより、すべての*.sh
が実行されます。 および*.sql
このディレクトリ内のファイルであり、元のcommand
には触れません。 。
このディレクトリ内のすべてのファイルは、コンテナの作成時にアルファベット順に自動的に実行されます。 。したがって、スクリプト/ SQLファイルをエントリポイントに追加するボリュームを作成し、コンテナにそれらを実行させます。これは、公式のpostgresドキュメントのセクション「このイメージを拡張する方法」
で説明されています。 。
作成ファイルは次のように変更されます:
postgres:
build: ./postgres
volumes:
- /shared_folder/postgresql:/var/lib/postgresql
- ./db-init-scripts:/docker-entrypoint-initdb.d
ports:
- "5432:5432"
一方、ローカルディレクトリ、例えばdb-init-scripts
、初期化スクリプトが含まれています(必要に応じて名前を変更してください)。 create_db.sh
をコピーします このフォルダに移動すると、新しいコンテナを作成すると自動的に実行されます。
いくつかのデータベースイメージがこのエントリポイントディレクトリを監視しています。これは非常に便利です。
container_name: postgres
冗長なようです。