カスタムのDockerfile
を使用してそれを機能させることができました 、これが私の解決策です:
プロジェクトの構造
data/
datasource.csv
db/
scripts/
1_init.sql
2_copy.sql
Dockerfile
docker-compose.yml
ファイル
-
CSV
ファイルはdata
にあります プロジェクト内のフォルダ。 -
プロジェクトフォルダーには、次の
docker-compose.yml
があります。 ファイル:version: '3.3' services: db: build: ./db container_name: postgres ports: - "5431:6666" environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=db_name volumes: - ./data:/data
-
Dockerfile
含まれるもの:FROM postgres:alpine ADD scripts/1_init.sql /docker-entrypoint-initdb.d ADD scripts/2_copy.sql /docker-entrypoint-initdb.d RUN chmod a+r /docker-entrypoint-initdb.d/* EXPOSE 6666
-
1_init.sql
本体:CREATE TABLE table_name ( --statement body );
-
そして
2_copy.sql
:COPY table_name FROM '/data/datasource.csv' DELIMITER ',' CSV HEADER;
説明
1_init.sql
DBテーブルを作成します。CSVファイルと同じ列名である必要があります 。 2_copy.sql
CSVからpostgresにデータをコピーする責任があります。
Dockerfile
postgresイメージを使用し、すべての*.sql
をコピーします /docker-entrypoint-initdb.d/
へのファイル 。その後、すべてのファイルが英数字順に実行されるため、*.sql
ファイルは数字で始まります。最後に、ポート6666
露出しています。
docker-compose.yml
Dockerfile
をビルドします db
から フォルダを作成し、5431
からアクセスできるようにします ポート。環境プロパティとして、基本的なpostgresプロパティが使用されます。そして最後にdata
CSVファイルのあるフォルダがコンテナにコピーされます。