डोकर में अपाचे: मैं "access.log" कैसे करूँ?


17

मैं अभी डॉकर और रिच के साथ शुरू कर रहा हूं अब मैं यह पता लगाने की कोशिश कर रहा हूं कि मेरा पहला डॉक्यूमेंटेड अपाचे 2 / पीएचपी पर्यावरण कैसे स्थापित किया जाए। अब तक मैं पूर्ण लिनक्स वीएम का उपयोग कर रहा हूं, जहां मैंने लॉग-फाइल का उपयोग / var / log / apache2 के लिए लिखा जा रहा है, फिर प्रत्येक दिन एक नई फ़ाइल के लिए हॉप करने के लिए "logrotate" का उपयोग करें।

Logfiles मुख्य रूप से तत्काल त्रुटि का पता लगाने के लिए इस्तेमाल किया गया था (यानी सर्वर पर लॉग ऑन करें और वर्तमान access.log और error.log फ़ाइलों को खोलने के लिए कम उपयोग करें) और विफलता 2ban के लिए।

अगर मैं सही हूं कि डॉक के माहौल में यह व्यावहारिक नहीं है - मुख्यतः क्योंकि आप आमतौर पर कंटेनरों में लॉग इन करने के लिए लॉग इन नहीं कर सकते। कंटेनर हटा दिए जाने पर भी लॉग खो जाएगा।

तो: उस स्थिति में access.log / error.log के साथ काम करने / बदलने / बदलने के लिए सबसे आम तरीका क्या है? उत्पादन और विकास दोनों के वातावरण के लिए सामान्य समाधान क्या हैं?

मेरे विचारों में अब तक एक NFS शेयर का उपयोग करना शामिल है (धीमा और यदि नहीं तो फ़ाइल नाम टकराव हो सकता है), और लॉगस्टैश (निश्चित नहीं है कि क्या यह छोटे साइटों या यहां तक ​​कि देव वातावरण के लिए प्रयास और अभ्यास के लायक है?) लेकिन मुझे यकीन है कि स्मार्ट लोग हैं बेहतर समाधान के साथ आए हैं?

निश्चित नहीं है कि इससे कोई फर्क पड़ता है, लेकिन वर्तमान में मैं php पर अपनी डॉकर छवि को आधार बना रहा हूं : 5.6-अपाचे

जवाबों:


13

आप अभी भी docker exec -it <your container name> /bin/bashअपने कंटेनर में जाने के लिए कमांड का उपयोग कर सकते हैं और अपना नियमित काम कर सकते हैं। या हो सकता है कि आप इसे अंजाम देने के लिए /bin/bashअपनी कमांड या अपनी कमांड की स्क्रिप्ट में बदल सकते हैं .sh

अपनी फ़ाइल को कंटेनर उपयोग से बाहर निकालने के लिए docker cp <container name:/path/to/file> </your local machine/path/>

और अपनी दैनिक नौकरी के लिए, आप cronउन आदेशों का उपयोग कर सकते हैं । मैं आपको अपने लगातार काम करने वाले आदेशों के बारे में बताता हूं। ताकि मैं कुछ महत्वपूर्ण के साथ खुशी से docker का उपयोग कर सकूं।

docker logs <container name/id>आदेश डोकर छवि के निष्पादन से लॉग देखने के लिए है। यह stdout को रीडायरेक्ट आउटपुट दिखाता है।


इसके अलावा, docker attach <container name>अपने कंटेनर से स्टडआउट देखने का अच्छा तरीका है। लेकिन कृपया सावधान रहें कि यदि आप ctrl + d या ctrl + c करते हैं, तो यह आपके चल रहे कार्य को सक्रिय कर देगा। इसलिए आपको एस्केप कुंजी का उपयोग करके इसे ठीक से अलग करना होगा ctrl+p+q। यदि आप सिर्फ अपने कंटेनर में खोलना चाहते हैं, तो मैं execऊपर दिए गए आदेश का उपयोग करना पसंद करता हूं ।
Fony Lew

6

लेखन और त्रुटि के बारे में कैसे stderr और stdout में लॉग इन करें?

https://mail-archives.apache.org/mod_mbox/httpd-users/201508.mbox/%3CCABx2=D-wdd8FYLkHMqiNOKmOaNYb-tAOB-AsSEf2p=ctd6sMdg@mail.gmail.com%3E

https://gist.github.com/afolarin/a2ac14231d9079920864

RUN ln -sf / dev / stdout /var/log/nginx/access.log

RUN ln -sf / dev / stderr /var/log/nginx/error.log

ELK के साथ केंद्रीकृत लॉगिंग हालांकि अधिक सक्रिय निगरानी के लिए अनुमति देगा। लेकिन आपने पहले से ही अपने बारे में सोचा था।


1

अब तक मैंने कई बार " डॉक लॉग " का उल्लेख किया है।

मैं एक पूर्ण डॉकटर newb हूं, ताकि मेरी समस्या का समाधान हो सके - लेकिन अभी तक मैं उस कमांड के पीछे की अवधारणा को पूरी तरह से नहीं समझ पाया हूं।

डॉकर JSON फ़ाइलों में सभी स्टडआउट आउटपुट को / var / lib / docker / कंटेनरों / में रखता है और मुझे लॉग्स कमांड के माध्यम से उन्हें एक्सेप्ट करने का मौका देता है।

अब तक मुझे यकीन नहीं है कि वास्तव में आउटपुट का उपयोग कैसे किया जाए।


1

हो सकता है कि सवाल पूछे जाने पर यह सुविधा मौजूद नहीं थी, लेकिन रन-वी तर्क के साथ आप कंटेनर में एक निर्देशिका पर होस्ट पर एक निर्देशिका माउंट कर सकते हैं।

docker run -v [host_dir]:[container_dir]

इस तरह से लॉग (या अन्य) फाइलें बच जाएंगी जब कंटेनर हटा दिया जाता है और आप फाइलों तक पहुंच सकते हैं जैसे कि अपाचे को कंटेनर में रखने के बजाय मेजबान पर स्थापित किया गया था।

वैकल्पिक रूप से, आप किसी तरह से संशोधित लॉग फ़ाइलों को किसी केंद्रीय स्थान पर धकेल सकते हैं। किबाना स्टैक इसे प्राप्त करने के लिए फाइलबीट का उपयोग करता है, लेकिन यदि आप स्टैक के बाकी हिस्सों की परवाह नहीं करते हैं, तो फाइलबीट को स्वतंत्र रूप से चलाना संभव है।


1
डॉकर ने तीन साल पहले माउंट वॉल्यूम को बांध दिया था।
वोमबल

0
root@my_docker:~ # ls -l /var/log/apache2/
total 0
lrwxrwxrwx 1 root root 11 Jul 17 04:55 access.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 Jul 17 04:55 error.log -> /dev/stderr
lrwxrwxrwx 1 root root 11 Jul 17 04:55 other_vhosts_access.log -> /dev/stdout
root@my_docker:~ #

डॉकटर छवि मैंने केवल सभी * .log फ़ाइलों को / dev / stdout और / dev / stderr से जोड़ा है, इसलिए मैंने उन्हें नहीं पढ़ा है।

फ़ाइलों को हटाने और अपाचे को फिर से शुरू करने के बाद मैं डॉक में / var / log / से लॉग प्राप्त कर सकता हूं।

docker-compose exec apache bash -c "tail -f /var/log/apache2/*.log"

0

अपाचे कॉन्फ़िगरेशन फ़ाइल में आप जोड़ सकते हैं:
CustomLog / dev / stdout
ErrorLog / dev / stderr

और लॉग नीचे आदेश का उपयोग करें देखने के लिए:
डोकर लॉग container_id

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.