मैं कस्टम 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
सीएसवी से पोस्टग्रेज में डेटा कॉपी करने के लिए जिम्मेदार है।
Dockerfile
पोस्टग्रेज छवि का उपयोग करता है और सभी *.sql
. को कॉपी करता है /docker-entrypoint-initdb.d/
पर फ़ाइलें . बाद में, सभी फाइलों को अल्फ़ान्यूमेरिकल क्रम में निष्पादित किया जाता है, इसीलिए *.sql
फाइलें अंकों से शुरू होती हैं। अंत में, पोर्ट 6666
उजागर है।
docker-compose.yml
Dockerfile
बनाता है db
. से फ़ोल्डर और इसे 5431
. के माध्यम से एक्सेस करने योग्य बनाएं बंदरगाह। पर्यावरणीय गुणों के रूप में मूल पोस्टग्रेज गुणों का उपयोग किया जाता है। और अंत में data
CSV फ़ाइल वाले फ़ोल्डर को कंटेनर में कॉपी किया जाता है।