2016-12-27 10 views
5

मैं कॉलेज के दूसरे वर्ष में बनाई गई एक परियोजना को डॉकराइज और ओपन सोर्स करने की कोशिश कर रहा हूं, यह परियोजना मारियाडीबी, phpMyAdmin और PHP/Yii फ्रेमवर्क का उपयोग करती है।डॉकर वॉल्यूम्स मारियाडीबी विंडोज

मेरा उद्देश्य केवल एक साधारण docker-compose up कमांड का उपयोग करने के लिए तैयार करना है।

मैं phpMyAdmin और डीबी के बीच कनेक्शन प्राप्त करने में कामयाब रहा और अब मैं डॉकर को डेटाबेस वॉल्यूम के सापेक्ष पथ रखने के लिए इसे स्थिर बनाने के लिए प्रयास करने पर अटक गया हूं। जब मैं इस विन्यास के साथ docker-compose up चलाने

volumes: 
    - './database/mysql/:/var/lib/mysql' 

इस परियोजना के अंदर डेटाबेस फ़ाइलें संग्रहीत किया जाता है और फिर मैं .gitignore समस्या में उन फ़ाइलों को अनदेखा कर सकते हैं है:

यहाँ है कि मैं क्या मात्रा लगाने के बारे में है मैं:

Invalid volume specification: 'C:\Users\MySelf\coding\my_app\database\mysql:/var/lib/mysql:rw'

मेजबान के बारे में, मैं डोकर उपकरण बॉक्स के साथ Windows का उपयोग कर रहा है, लेकिन मैं डब्ल्यू करने के लिए docker-compose.yml चाहते ओएस की परवाह किए बिना ओर्क।

मैंने अन्य प्रश्नों को समान देखा है लेकिन उनकी त्रुटि विंडोज़ पर पूर्ण पथों के साथ समस्याओं से आई है, जिन्हें मैं नहीं ढूंढ रहा हूं।

संपादित करें: सही अंतिम डोकर-compose.yml जोड़ा जा रहा है, उम्मीद है कि यह मदद कर सकते हैं

version: '2' 
services: 
    web_db: 
    build: ./database/mysql 
    command: "mysqld --innodb-buffer-pool-size=20M" 
    volumes: 
     - ./database/mysql/data/:/var/lib/mysql 
     - ./database/mysql/initDB/create_tables.sql:/docker-entrypoint-initdb.d/create_tables.sql 
    environment: 
     MYSQL_ROOT_PASSWORD: 'YOURPASSWORD' 
     MYSQL_DATABASE: 'support-technique' 
     MYSQL_ROOT_HOST: '172.17.0.1' 
    ports: 
     - "3306:3306" 
    container_name: web_db 

    web: 
    build: . 
    depends_on: 
     - web_db 
    links: 
     - web_db:db 
    ports: 
     - "80:80" 

    phpmyadmin: 
    image: phpmyadmin/phpmyadmin 
    depends_on: 
     - web_db 
    links: 
     - web_db:mysql 
    ports: 
     - "8181:80" 
    environment: 
PMA_HOST: mysql 
+0

लेकिन '/ var/lib/mysql' यह एक लिनक्स पथ है! – Hackerman

+0

@ हैकरमैन '/ var/lib/mysql' डॉकर कंटेनर में पथ है जो मेरी मेजबान मशीन – Daniel

उत्तर

4

जब आप Mount a host directory as a data volume, प्रलेखन कहते हैं:

host-dir या तो एक पूर्ण किया जा सकता है पथ या नाम मान। यदि आप host-dir के लिए एक पूर्ण पथ प्रदान करते हैं, तो आपके द्वारा निर्दिष्ट पथ पर डॉकर बाइंड-माउंट करता है। यदि आप कोई नाम प्रदान करते हैं, तो डॉकर उस नाम से नामित वॉल्यूम बनाता है।

एक नाम मूल्य अल्फानुमेरिक चरित्र, a-z0-9, _ (अंडरस्कोर) द्वारा पीछा किया, . (अवधि) या - (हाइफन) से प्रारंभ होना चाहिए।
एक पूर्ण पथ / (आगे स्लैश) के साथ शुरू होता है।

त्रुटि संदेश की व्याख्या करता है।

पथ डोकर में .env फ़ाइल बनाएँ:

एक निरपेक्ष पथ links it to the OS (जो नहीं है कि आप क्या चाहते)

docker run -v c:\<path>:/c:\<container path> 
docker run -v /c/<path>:/c:\<container path> 

"Running a docker-compose “Getting Started” example causes “Invalid volume specification” on Windows" में उल्लेख किया है का उपयोग करना, पहले की स्थापना इस docker-compose environment variable कोशिश -compose।YML निम्नलिखित सामग्री के साथ रखा गया है:

COMPOSE_CONVERT_WINDOWS_PATHS=1 

OP Daniel की पुष्टि करता है in the comments कि COMPOSE_CONVERT_WINDOWS_PATHS, सहित .env साथ एक रिश्तेदार पथ काम करता है

मैं data volume नाम का उपयोग करने की अनुशंसा करता हूं: यह होस्ट पथनाम पर निर्भर नहीं होगा।

+0

पर नहीं है तो सापेक्ष पथ बिल्कुल एक विकल्प नहीं हैं? – Daniel

+1

@Daniel बिल्कुल: मेजबान के लिए, कोई सापेक्ष पथ नहीं: केवल पूर्ण पथ या volume नाम। – VonC

+0

वास्तव में सापेक्ष पथ काम करते हैं! मुझे बस आपके सुझाव का पालन करने और 'COMPOSE_CONVERT_WINDOWS_PATHS = 1' को .env में जोड़ने की आवश्यकता है! क्या आप अपना जवाब अपडेट कर सकते हैं ताकि मैं आपको बक्षीस दे सकूं? – Daniel

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