2016-03-07 3 views
5

मैं डॉकर पर एक एप्लिकेशन होस्ट करने की कोशिश कर रहा हूं जो MySQL डीबी का उपयोग करता है। मैं डॉकर रचना का उपयोग कर रहा हूँ। मेरी YML फ़ाइल इस तरह दिखता है:मैं डॉकर रचना के साथ एक MySQL डीबी कैसे बना सकता हूं?

version: '2' 
volumes: 
    data_sql:  
services: 
medical-mysql: 
    image: mysql 
    hostname: medical-mysql  
    volumes:  
    - data_sql:/dbcreation.sql 
    environment: 
     MYSQL_DATABASE: Medical 
     MYSQL_ROOT_PASSWORD: root 
     STARTUP_SQL: data_sql 
    ports: 
    - "3306:3306" 
    medical-main: 
    build: . 
    ports: 
    - "8080:8080"  
    depends_on: 
    - medical-mysql 

मैं एक dbcreation.sql जो डाटाबेस स्कीमा बनाता है और YML फ़ोल्डर में रखा जाता है की है। जब मैं yml फ़ाइल चलाता हूं ऐसा लगता है जैसे फ़ाइल नहीं चल रही है।

मुझे क्या याद आया?

+0

तो data_sql क्या है और जब आप dbcreation.sql को कॉल करते हैं? – Mattia

+0

data_sql केवल सृजन फ़ाइल होस्ट करने के लिए बनाई गई मात्रा है। मुझे ऐसा करने का कोई और तरीका नहीं मिला, और यह भी काम नहीं करता है। –

+0

ऐसा लगता है कि आप dbcreation.sql में data_sql बढ़ रहे हैं। आपने कभी डीबी नहीं बनाया है। आपको/var/lib/mysql में कॉपी करने की आवश्यकता है (और dbcreation.sql नहीं यदि आप इसका उपयोग करना चाहते हैं तो आपको ऐसा कुछ निष्पादित करने की आवश्यकता है: mysql -u user db Mattia

उत्तर

10

1) डंप फ़ाइल dbcreation.sql

2 बनाएं) import.sh फ़ाइल बनाएँ:

#!/usr/bin/env bash 
mysql -u root -p$MYSQL_ROOT_PASSWORD < /tmp/dbcreation.sql 

3) बनाएं डोकर-compose.yaml

database: 
    image: mysql 
    container_name: database.dev 
    command: mysqld --user=root --verbose 
    volumes: 
    - ./dbcreation.sql:/tmp/dbcreation.sql 
    - ./import.sh:/tmp/import.sh 
    ports: 
    - "3306:3306" 
    environment: 
    MYSQL_DATABASE: "test" 
    MYSQL_USER: "test" 
    MYSQL_PASSWORD: "test" 
    MYSQL_ROOT_PASSWORD: "root" 
    MYSQL_ALLOW_EMPTY_PASSWORD: "yes" 

"- ./dbcreation.sql:/tmp/dbcrea tion.sql "-" - local_path: path_inside_container "

4) भागो

docker-compose up 
docker exec database.dev bash /tmp/import.sh 
+0

मुझे आपके उत्तर को लागू करने में कोई समस्या थी एक बार मेरा मुख्य कंटेनर बनने के बाद, इसे डीबी की आवश्यकता होती है। यह मुझे जहां चाहता था पाने के कई संकेत दिए। मैं mysql कंटेनर निर्माण को एक अलग yml फ़ाइल में विभाजित करता हूं। मैंने निम्नलिखित के साथ एक sh फ़ाइल बनाई: डॉकर-कंपोज़ -f mysql.yml up -d नींद 10; डॉकर निष्पादन चिकित्सा-mysql bash /tmp/import.sh डॉकर-लिखें यह काम करता है। क्या यह सुनिश्चित करने का एक बेहतर तरीका है कि MySQL कंटेनर नींद से तैयार है? –

+0

@IzharLotem यह कंटेनर के बारे में नहीं है, यह अंदर के आवेदन के बारे में है। कंटेनर तैयार है, लेकिन कंटेनर के अंदर आवेदन नहीं करता है। आपको इसे एप्लिकेशन स्तर पर हल करने की आवश्यकता है। आप अपने "मुख्य कंटेनर" में MySQL डेटाबेस के स्वास्थ्य की जांच कर सकते हैं या आप डॉकरफ़ाइल के अंदर सीएमडी को ओवरराइट कर सकते हैं और आयात के बाद कहीं ध्वज लगा सकते हैं। वैसे भी यह डॉकर नौकरी नहीं है। – ashatrov

+0

यह काम करता है, @ashatrov धन्यवाद – Devang

3

आप सिर्फ एक फ़ोल्डर (यानी में अपने sql फ़ाइल (dbcreation.sql) डाल दिया।/Mysql_init) और इस तरह एक मात्रा के रूप में फ़ोल्डर जोड़ने:

volumes: 
    - /mysql_init:/docker-entrypoint-initdb.d 

MySQL छवि स्टार्टअप पर /docker-entrypoint-initdb.d में सभी .sql, .sh और .sql.gz फ़ाइलों को निष्पादित करेंगे।

संबंधित मुद्दे