2015-07-15 11 views
18

मैं यह नहीं समझ सकता कि डॉकर कंटेनर से फ़ाइल की सामग्री को कैसे पढ़ा जाए। मैं अपने पीजीएसक्यूएल कंटेनर में एक एसक्यूएल फाइल की सामग्री निष्पादित करना चाहता हूं। मैंने कोशिश की:बैश/डॉकर निष्पादन: एक कंटेनर के अंदर से फ़ाइल पुनर्निर्देशन

docker exec -it app_pgsql psql --host=127.0.0.1 --username=foo foo < /usr/src/app/migrations/*.sql 

मेरा आवेदन /usr/src/app में आरोहित है। लेकिन मुझे एक त्रुटि मिली:

bash: /usr/src/app/migrations/*.sql: No such file or directory

ऐसा लगता है कि बैश इस पथ को होस्ट पथ के रूप में व्याख्या करता है, अतिथि नहीं। दरअसल, दो बार में कमांड को क्रियान्वित पूरी तरह से काम करता है:

docker exec -it app_pgsql 
psql --host=127.0.0.1 --username=foo foo < /usr/src/app/migrations/*.sql 

मुझे लगता है कि और अधिक एक डोकर की तुलना में एक बैश मुद्दा है, लेकिन मैं अभी भी अटक रहा हूँ! :)

+0

एकल कमांड स्ट्रिंग एकल उद्धरण। –

उत्तर

22

प्रयास करें और उस आदेश

sh -c 'foo < /usr/src/app/migrations/*.sql' 

पूर्ण कमांड यह होगी निष्पादित करने के लिए एक खोल का उपयोग करें:

psql --host=127.0.0.1 --username=foo sh -c 'foo < /usr/src/app/migrations/*.sql' 
10

कोशिश के साथ sh -c "your long command"

+0

थोड़ा देर हो चुकी है;) लेकिन मैं सहमत हूं। मैं इसका उपयोग करता हूं कि किसी भी समय पाइप या पुनर्निर्देशन शामिल हैं। – VonC

+0

हाँ आप मुझसे ज्यादा तेज थे :-) – user2915097

+0

आप मेरी सावियाएह हैं! +1, मैं एक डॉकर कंटेनर के अंदर एक फाइल को लिख रहा था, इस तकनीक ने काम किया। 'डॉकर निष्पादन- CONTAINER_ID sh -c 'echo" हैलो वर्ल्ड "> टेस्टफ़ाइल/test_user/test_file.txt'' –

1

आप क्रम में डेटाबेस ग्राहक का उपयोग कर सकते आपको कंटेनर से कनेक्ट करने और डेटाबेस फ़ाइल को पुनर्निर्देशित करने के लिए, फिर आप पुनर्स्थापित कर सकते हैं।

यहां MySQL के साथ एक उदाहरण है: मेजबान नेटवर्क स्टैक का उपयोग करके एक कंटेनर MySQL चला रहा है। कि चूंकि कंटेनर मेजबान नेटवर्क स्टैक उपयोग कर रहा है (यदि आप अपने MySQL या जो कुछ भी डेटाबेस पर कोई प्रतिबंध नहीं है), तो आप स्थानीय होस्ट के माध्यम से कनेक्ट कर सकते हैं और पारदर्शी

mysql -h 127.0.0.1 -u user -pyour_passwd database_name < db_backup.sql 

आदेशों प्रदर्शन कर आप भी ऐसा कर सकते PostgresSQL (Restore a postgres backup file using the command line?) के साथ:

pg_restore --host 127.0.0.1 --port 5432 --username "postgres" --dbname "mydatabase" --no-password --clean "/home/dinesh/db/mydb.backup" 

कि "डोकर कार्यकारी" की तरह लगता है इनपुट पुनर्निर्देशन का समर्थन नहीं करता है .. मैं इस बात की पुष्टि करेगा और शायद GitHub पर डोकर समुदाय के लिए एक मुद्दा खोलते हैं, अगर यह लागू होता है।

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