जब मैं इस छवि का निर्माण करता हूं docker build -t myname/symfony_apps:latest . और कंटेनर को इसके साथ चलाएं docker run -p 8080:80 myname/symfony_apps:latest.अपाचे लॉग अनुमति से वंचित त्रुटियों से भर गया है, अजीब चीज जिसे मैंने चेक किया है ls -a और अनुमतियां ठीक हैं । और जब मैं कंटेनर के बैश से चामोद चलाता हूं, तो अपाचे अनुमति के मुद्दे चले जाते हैं और ऐप अच्छी तरह से काम करता है
स्थिति
चल chmod कमांड से dockerfile: अनुमतियां बदल दी जाती हैं लेकिन अपाचे अभी भी अनुमति से वंचित होने की शिकायत करता है । कंटेनर के अंदर बैश के साथ चामोद समान कमांड चलाना: अनुमतियां बदल दी गई हैं और मेरा ऐप चल रहा है
कोई विचार , क्या मुझे कुछ याद आ रहा है, शायद मुझे डॉकरफाइल में कहीं रूट उपयोगकर्ता जोड़ना चाहिए ?
मेरे पास एक ही मुद्दा था और ऐसा लगता है कि डॉकर या ओवरले 2 में कुछ बग है यदि निर्देशिका सामग्री एक परत में बनाई गई है और इसकी अनुमतियां दूसरे में बदल दी गई हैं ।
वर्कअराउंड के रूप में आप स्रोतों को अस्थायी निर्देशिका में कॉपी कर सकते हैं:
COPY . /src
और फिर इसे स्थानांतरित करें /var/www/html और सेटअप अनुमतियां (एक में RUN कमांड):
इस मुद्दे की संभावना एक का परिणाम है VOLUME अपस्ट्रीम डॉकरफाइल के अंदर परिभाषा। जब डॉकरफाइल में वॉल्यूम परिभाषित किया जाता है, तो आप फ़ाइलों को एक के साथ जोड़ सकते हैं COPY या ADD सीधे छवि में कमांड करें । हालांकि, एक RUN लाइन होगी:
डॉकरफाइल के वर्तमान बिंदु के रूप में छवि परिभाषा का उपयोग करके एक अस्थायी कंटेनर बनाएं
उस अस्थायी कंटेनर में आपके या डॉकरफाइल के अंदर निर्दिष्ट मूल छवि के रूप में एक अनाम वॉल्यूम माउंट होगा
अनाम वॉल्यूम को छवि की सामग्री से प्रारंभ किया जाएगा
आपका आदेश कंटेनर के अंदर चलेगा
यदि आप इस दौरान निर्देशिका सूचीबद्ध करते हैं RUN कमांड, आप अपने परिवर्तनों को लागू होते देखेंगे, लेकिन उन परिवर्तनों को वॉल्यूम पर लागू किया गया है
जब आपका रन कमांड पूरा हो जाता है, तो डॉकर कंटेनर में परिवर्तनों को कैप्चर करेगा
इन परिवर्तनों को एक साथ देखा जा सकता है docker diff यदि आप अस्थायी कंटेनरों को नहीं हटाते हैं (आप इसके साथ एक बिल्ड चला सकते हैं --rm=false उन्हें रहने के लिए)
इन परिवर्तनों में अनाम वॉल्यूम सामग्री शामिल नहीं होगी क्योंकि वे अस्थायी कंटेनर फाइल सिस्टम के अंदर मौजूद नहीं हैं, वॉल्यूम अलग हैं
इस व्यवहार के कारण, आपके पास विकल्प हैं:
आप अपनी फ़ाइलों को एक अलग निर्देशिका में कॉपी कर सकते हैं और वहां अनुमतियां बदल सकते हैं
आप अपने होस्ट पर अनुमतियों को ठीक कर सकते हैं ताकि वे सीधे उन अनुमतियों के साथ कॉपी हो जाएं
आप अपनी छवि से वॉल्यूम को हटा सकते हैं, अपस्ट्रीम छवि को उनकी वॉल्यूम परिभाषा को हटाने के लिए प्राप्त कर सकते हैं, या आप वॉल्यूम परिभाषा के बिना अपस्ट्रीम छवि की अपनी प्रतिलिपि का पुनर्निर्माण कर सकते हैं और अपनी छवियों को उस से दूर कर सकते हैं
ध्यान दें कि वर्तमान पीएचपी छवियों के अंदर, ऐसा प्रतीत होता है कि वॉल्यूम हटा दिया गया है, जिसका अर्थ है कि हमारे पास प्रभावी रूप से विकल्प 3 है ।
जब मैं डॉकर-कंपोज़ वॉल्यूम के माध्यम से उस निष्पादन योग्य फ़ाइल को ओवरराइड करता हूं, तो execute अनुमति केवल रोल-बैक की तरह है-तकनीकी रूप से मूल फ़ाइल अनुमति के लिए ओवररोड ।
देव मोड के लिए फिक्स बस के लिए है chmod a+x yourfile होस्ट से, जो कंपोज़ वॉल्यूम माउंटिंग में विरासत में मिलेगा ।
मैं आपके अंतिम कमांड में एक अतिरिक्त स्थान देख रहा हूं (मैं अपने फोन पर हूं, इसलिए मुझे यकीन नहीं हो सकता) । जैसा कि अनुमति समस्या लॉग निर्देशिका के साथ प्रतीत होती है, अंतिम पंक्ति को इसमें बदलें: ``
चलाने के लिए chmod आर 777 /var/www/html/app/कैश /var/www/html/app/लॉग
मैं आपकी समस्या को पुन: उत्पन्न करने में असमर्थ हूं । अगर मैं आपके डॉकरफाइल का उपयोग करता हूं और स्थानीय रूप से कुछ डमी फाइलें सेट करता हूं, तो अनुमतियां सही हैं और सब कुछ बस काम करता है । मैं एक कंटेनर बूट कर सकता हूं और एक वेब ब्राउज़र के माध्यम से सामग्री तक पहुंच सकता हूं । क्या आप विशिष्ट त्रुटि संदेशों को शामिल करने के लिए अपना प्रश्न अपडेट कर सकते हैं? क्या आप निश्चित हैं कि आपका अपाचे कॉन्फ़िगरेशन ' अपाचे 2।कॉन्फ) कोई समस्या पैदा नहीं कर रहा है? यदि आप अपाचे 2 ' स्थापित नहीं करते हैं तो क्या त्रुटियां दूर हो जाती हैं । conf?