Saya berhasil membuatnya bekerja menggunakan Dockerfile
khusus , inilah solusi saya:
Struktur proyek
data/
datasource.csv
db/
scripts/
1_init.sql
2_copy.sql
Dockerfile
docker-compose.yml
File
-
CSV
file terletak didata
folder di dalam proyek. -
Di folder proyek ada
docker-compose.yml
berikut ini berkas: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
berisi: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
tubuh:CREATE TABLE table_name ( --statement body );
-
Dan
2_copy.sql
:COPY table_name FROM '/data/datasource.csv' DELIMITER ',' CSV HEADER;
Penjelasan
1_init.sql
membuat tabel DB, harus memiliki nama kolom yang sama seperti pada file CSV . 2_copy.sql
bertanggung jawab untuk menyalin data dari CSV ke postgres.
Dockerfile
menggunakan gambar postgres dan menyalin semua *.sql
file ke /docker-entrypoint-initdb.d/
. Kemudian, semua file dieksekusi dalam urutan alfanumerik, itulah sebabnya *.sql
file dimulai dengan angka. Terakhir, port 6666
terungkap.
docker-compose.yml
membangun Dockerfile
dari db
folder dan membuatnya dapat diakses melalui 5431
Pelabuhan. Sebagai properti lingkungan, properti postgres dasar digunakan. Dan di akhir data
folder dengan file CSV disalin ke penampung.