backgroud
मुद्दे के दोष को कंटेनर वॉल्यूम की हमारी गलत धारणा के बीच विभाजित किया जा सकता है, और इन संस्करणों में लिखे गए डॉकटर लीक (जारी करने में विफल) अस्थायी डेटा के साथ एक समस्या है। हमें मैपिंग होनी चाहिए (या तो फ़ोल्डर या अन्य लगातार स्टोरेज के दावों की मेजबानी करने के लिए) कंटेनर के अस्थायी / लॉग / स्क्रैच फ़ोल्डर में से सभी जहां हमारे ऐप अक्सर और / या भारी लिखते हैं। डोकर डिफ़ॉल्ट रूप से स्थित तथाकथित EmptyDirs को स्वचालित रूप से बनाए गए सभी की सफाई की जिम्मेदारी नहीं लेता है /var/lib/docker/overlay2/*/diff/*
। कंटेनर बंद होने के बाद इन "गैर-लगातार" फ़ोल्डरों के डॉकटर द्वारा स्वचालित रूप से शुद्ध किया जाना चाहिए, लेकिन जाहिरा तौर पर वे नहीं हैं (वे तब भी होस्ट की तरफ से शुद्ध करना असंभव हो सकता है अगर कंटेनर अभी भी चल रहा है - और यह महीनों तक चल सकता है समय पर)।
वैकल्पिक हल
वर्कअराउंड के लिए सावधानीपूर्वक मैनुअल सफाई की आवश्यकता होती है, और जबकि पहले से ही कहीं और वर्णित है, फिर भी आपको मेरे केस स्टडी से कुछ संकेत मिल सकते हैं, जिन्हें मैंने यथासंभव शिक्षाप्रद और सामान्य बनाने की कोशिश की थी।
तो क्या हुआ अपराधी ऐप (मेरे मामले में clair-scanner
) कुछ महीनों में सैकड़ों डेटा लिखने में कामयाब रहा /diff/tmp
, डॉकर के सबफ़ोल्डर कोoverlay2
du -sch /var/lib/docker/overlay2/<long random folder name seen as bloated in df -haT>/diff/tmp
271G total
तो उन सभी सबफोल्डर्स के रूप में /diff/tmp
वे बहुत आत्म-व्याख्यात्मक थे (सभी फॉर्म के थे clair-scanner-*
और अप्रचलित निर्माण की तारीखें थीं), मैंने संबद्ध कंटेनर ( docker stop clair
) को रोक दिया और इन अप्रचलित उप-निर्माताओं को ध्यान से हटा दिया diff/tmp
, एक अकेले (सबसे पुराने, और) के साथ विवेकपूर्ण शुरुआत डॉक इंजन पर प्रभाव का परीक्षण करना (जिसमें systemctl restart docker
डिस्क स्थान को पुनः प्राप्त करने के लिए पुनः आरंभ करने की आवश्यकता थी ]:
rm -rf $(ls -at /var/lib/docker/overlay2/<long random folder name seen as bloated in df -haT>/diff/tmp | grep clair-scanner | tail -1)
मैंने डॉक स्पेस को फिर से स्थापित करने या इसके संपूर्ण फ़ोल्डरों को शुद्ध करने की आवश्यकता के बिना सैकड़ों गीगा डिस्क डिस्क को पुनः प्राप्त किया। सभी चलने वाले कंटेनरों को एक बिंदु पर रोकना पड़ा, क्योंकि डिस्क स्थान को पुनः प्राप्त करने के लिए डॉक डेमॉन रिस्टार्ट की आवश्यकता थी, इसलिए सुनिश्चित करें कि पहले आपके फेलओवर कंटेनर सही ढंग से / अन्य नोड / एस पर चल रहे हैं। मैं चाहता हूं कि docker prune
कमांड अप्रचलित /diff/tmp
(या सम /diff/*
) डेटा को कवर कर सके ( साथ ही एक अन्य स्विच के माध्यम से)।
अब यह 3 साल पुराना मुद्दा है, आप इसका समृद्ध और रंगीन इतिहास डॉकर मंचों पर पढ़ सकते हैं, जहाँ 2019 में उपरोक्त समाधान के अनुप्रयोग लॉग का एक संस्करण प्रस्तावित किया गया था और लगता है कि इसने कई सेटअपों में काम किया है: https: // forums.docker.com/t/some-way-to-clean-up-identify-contents-of-var-lib-docker-overlay/30604