2016-02-15 4 views
25

पर डॉकर-कंपोज़ लॉग सहेजें, मेरे पास मेरे बिल्ड सर्वर पर चलने वाले यूनिट परीक्षण हैं और कुछ विफल होने पर विश्लेषण के लिए लॉग परिणाम कैप्चर करना चाहते हैं। मुझे अभी तक फ़ाइल में docker-compose logs के आउटपुट को रीडायरेक्ट करने का कोई तरीका नहीं मिला है, या यह पता लगाने के लिए कि लॉग फाइलें वास्तव में कहां रहती हैं।फ़ाइल को

docker-compose logs > logs.txt 

संपादित करें - स्पष्टीकरण:

मैं के बराबर चाहते

मेरी डोकर कंटेनरों के सभी उपयोगी लॉग, जो docker-compose logs की एक पुस्तिका रन का पता चलता है का उत्पादन। मैं इस प्रक्रिया को उन फ़ाइलों को सहेजने के लिए स्क्रिप्ट करना चाहता हूं जो मेरे बिल्ड सर्वर पर एक आर्टिफैक्ट है। अनिवार्य रूप से, docker-compose logs का आउटपुट एक फ़ाइल में सहेजा गया, हालांकि docker-compose logs कभी बाहर निकलता नहीं है।

उत्तर

25

डिफ़ॉल्ट डोकर करके अपने कंटेनर लॉग रिकॉर्ड करने के लिए json-file ड्राइवर का उपयोग करता है और लॉग के कच्चे json उत्पादन में पाया जा सकता:

/var/lib/docker/containers/[container-id]/[container-id]-json.log 

आप चलाकर इस स्थान प्राप्त कर सकते हैं:

docker inspect --format='{{.LogPath}}' [container-id or container-name] 

जब आप docker-compose logs [service-name] चलाते हैं, docker-compose आपके द्वारा संदर्भित सेवा (कंटेनर) से संलग्न होगा और LogPrinter ऑब्जेक्ट उपर्युक्त फ़ाइल की सामग्री आउटपुट करेगा, लेकिन स्वरूपित है ताकि वे आर EAD।

संबंधित डॉक्स: https://docs.docker.com/compose/compose-file/#logging

10

मुझे यकीन नहीं है कि आप क्या हासिल करने की कोशिश कर रहे हैं। क्या आप

docker-compose logs > logs.txt 

निर्देश फ़ाइल के रूप में लिखने की कोशिश कर रहे हैं? या आपका मुद्दा यह है कि रीडायरेक्ट पूरे आउटपुट को "पकड़" नहीं देता है?

बाद में, आप कर सकते हैं:

docker-compose logs --no-color >& logs.txt 

या

docker-compose logs --no-color |& tee logs.txt 
दोनों को

टर्मिनल पर लॉग देख सकते हैं और एक फ़ाइल में एक ही समय में डंप।

+1

टाइप 'डोकर-लिखें logs', सही लॉग उत्पादन स्ट्रीमिंग शुरू होता है के लिए docker logs आदेश दे सकते हैं? मैं मूल रूप से उस आउटपुट को एक फ़ाइल में डंप करना चाहता हूं। मैंने प्रस्तावित आदेश के साथ समस्या यह है कि 'डॉकर-कंपोज़ लॉग' समाप्त नहीं होता है, इसलिए यह कभी भी आउटपुट को फ़ाइल में रीडायरेक्ट नहीं करता है। – Ryan

+1

लॉग एक स्ट्रीम हैं, रीडायरेक्ट फ़ाइल को पॉप्युलेट करता है क्योंकि यह डेटा प्राप्त करता है। आपकी फ़ाइल 0 बाइट्स के साथ चिपक जाती है? क्या यह '>' के बजाय '> &' के साथ भी करता है? – creack

+0

आपके सुझाव काम करते हैं (वे मेरे लॉग के साथ logs.txt पॉप्युलेट करते हैं), लेकिन कमांड कभी वापस नहीं आता है, क्योंकि डॉकर-कंपोज़ लॉग अनिश्चित काल तक चलता है। – Ryan

3

बाद में रिहाई डोकर-लिखें 1.7.x में +, यह तय हो गई है। देख https://github.com/docker/compose/issues/2227 & https://github.com/docker/compose/releases/tag/1.7.0

इससे पहले, वहाँ एक और तरीका है इसे प्राप्त करने के लिए है, स्वीकार किए जाते हैं जवाब का समाधान कौन सा रिमोट/सुरक्षा मामले के लिए लागू नहीं किया जा सकता सीधे मेजबान फ़ाइलों तक पहुँचने की है।

हम नीचे docker-compose ps आदेश से कंटेनर का नाम हो और पाश

docker-compose ps | tail -n +3 | awk '{print $1}' | xargs -n1 docker logs 
संबंधित मुद्दे