डॉकर में चामोद सही ढंग से काम नहीं कर रहा है

मैं अपने लिए एक डॉकर छवि बना रहा हूं Symfony ऐप और मुझे अपाचे सर्वर को कैश और लॉग फ़ोल्डर में लिखने की अनुमति देने की आवश्यकता है

#DockerfileFROM php:7-apacheRUN apt-get update \&& apt-get install -y libicu-dev  freetds-common freetds-bin unixodbc \&& docker-php-ext-install intl mbstring \&& a2enmod rewriteCOPY app/php.ini /usr/local/etc/php/COPY app/apache2.conf /etc/apache2/apache2.confCOPY ./ /var/www/htmlRUN find /var/www/html/ -type d -exec chmod 755 {} \; RUN find /var/www/html/ -type f -exec chmod 644 {} \;RUN chmod -R 777 /var/www/html/app/cache /var/www/html/app/logs

जब मैं इस छवि का निर्माण करता हूं 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 कमांड):

RUN rm -rf /var/www/html && mv /src /var/www/html &&\    find /var/www/html/ -type d -exec chmod 755 {} \; &&\    find /var/www/html/ -type f -exec chmod 644 {} \; &&\    chmod -R 777 /var/www/html/app/cache /var/www/html/app/logs

इसके अलावा मैंने बनाया GitHub मुद्दे.

जोड़ने का प्रयास करें :

USER root

इसने मेरे लिए काम किया ।

डॉकर में रन का डिफ़ॉल्ट शेल / बिन / श है और यह वह जगह है जहां अनुमतियों को सही ढंग से सेट नहीं किया जा रहा है वास्तव में एक समस्या है ।

लेकिन आप निर्देशिका सूची से पहले और बाद में आसानी से ठीक करने, नोटिस करने के बजाय बस /बिन/बैश का उपयोग करने के लिए बदल सकते हैं

Step 7/9 : RUN /bin/bash -c 'ls -la; chmod +x gitlab-properties-builder.sh; ls -la'---> Running in dc57ae77aa67drwxr-xr-x. 3 root root      103 Mar  8 17:56 .drwxr-xr-x. 1 root root       46 Mar  8 17:57 ..drwxr-xr-x. 2 root root        6 Mar  7 20:47 config-rw-r--r--. 1 root root     2340 Mar  7 21:20 gitlab-properties-builder.sh-rw-r--r--. 5 root root 57325770 Mar  5 14:39 gitlab-scm-collector-2.0.5-SNAPSHOT.jardrwxr-xr-x. 1 root root       42 Mar  8 17:56 .drwxr-xr-x. 1 root root       61 Mar  8 17:57 ..drwxr-xr-x. 2 root root        6 Mar  7 20:47 config-rwxr-xr-x. 1 root root     2340 Mar  7 21:20 gitlab-properties-builder.sh-rw-r--r--. 5 root root 57325770 Mar  5 14:39 gitlab-scm-collector-2.0.5-SNAPSHOT.jar---> 8b5de6e348d3

इस मुद्दे की संभावना एक का परिणाम है VOLUME अपस्ट्रीम डॉकरफाइल के अंदर परिभाषा। जब डॉकरफाइल में वॉल्यूम परिभाषित किया जाता है, तो आप फ़ाइलों को एक के साथ जोड़ सकते हैं COPY या ADD सीधे छवि में कमांड करें । हालांकि, एक RUN लाइन होगी:

  • डॉकरफाइल के वर्तमान बिंदु के रूप में छवि परिभाषा का उपयोग करके एक अस्थायी कंटेनर बनाएं
    • उस अस्थायी कंटेनर में आपके या डॉकरफाइल के अंदर निर्दिष्ट मूल छवि के रूप में एक अनाम वॉल्यूम माउंट होगा
    • अनाम वॉल्यूम को छवि की सामग्री से प्रारंभ किया जाएगा
  • आपका आदेश कंटेनर के अंदर चलेगा
    • यदि आप इस दौरान निर्देशिका सूचीबद्ध करते हैं RUN कमांड, आप अपने परिवर्तनों को लागू होते देखेंगे, लेकिन उन परिवर्तनों को वॉल्यूम पर लागू किया गया है
  • जब आपका रन कमांड पूरा हो जाता है, तो डॉकर कंटेनर में परिवर्तनों को कैप्चर करेगा
    • इन परिवर्तनों को एक साथ देखा जा सकता है docker diff यदि आप अस्थायी कंटेनरों को नहीं हटाते हैं (आप इसके साथ एक बिल्ड चला सकते हैं --rm=false उन्हें रहने के लिए)
    • इन परिवर्तनों में अनाम वॉल्यूम सामग्री शामिल नहीं होगी क्योंकि वे अस्थायी कंटेनर फाइल सिस्टम के अंदर मौजूद नहीं हैं, वॉल्यूम अलग हैं

इस व्यवहार के कारण, आपके पास विकल्प हैं:

  1. आप अपनी फ़ाइलों को एक अलग निर्देशिका में कॉपी कर सकते हैं और वहां अनुमतियां बदल सकते हैं
  2. आप अपने होस्ट पर अनुमतियों को ठीक कर सकते हैं ताकि वे सीधे उन अनुमतियों के साथ कॉपी हो जाएं
  3. आप अपनी छवि से वॉल्यूम को हटा सकते हैं, अपस्ट्रीम छवि को उनकी वॉल्यूम परिभाषा को हटाने के लिए प्राप्त कर सकते हैं, या आप वॉल्यूम परिभाषा के बिना अपस्ट्रीम छवि की अपनी प्रतिलिपि का पुनर्निर्माण कर सकते हैं और अपनी छवियों को उस से दूर कर सकते हैं

ध्यान दें कि वर्तमान पीएचपी छवियों के अंदर, ऐसा प्रतीत होता है कि वॉल्यूम हटा दिया गया है, जिसका अर्थ है कि हमारे पास प्रभावी रूप से विकल्प 3 है ।

मैंने अभी निम्नलिखित के साथ एक प्रयोग किया है:

FROM alpineLABEL MAINTAINER="YIMGA YIMGA Salathiel Genèse"RUN apk add --no-cache inotify-toolsCMD [ "./script.sh" ]WORKDIR /opt/app/COPY src/ /opt/app/RUN chmod a+x *.sh

और यह सिर्फ महान काम करता है ।

हालांकि

जब मैं डॉकर-कंपोज़ वॉल्यूम के माध्यम से उस निष्पादन योग्य फ़ाइल को ओवरराइड करता हूं, तो execute अनुमति केवल रोल-बैक की तरह है-तकनीकी रूप से मूल फ़ाइल अनुमति के लिए ओवररोड ।

देव मोड के लिए फिक्स बस के लिए है chmod a+x yourfile होस्ट से, जो कंपोज़ वॉल्यूम माउंटिंग में विरासत में मिलेगा ।

ठीक है।… मैंने प्रश्न संपादित किया :slight_smile:

मैं आपके अंतिम कमांड में एक अतिरिक्त स्थान देख रहा हूं (मैं अपने फोन पर हूं, इसलिए मुझे यकीन नहीं हो सकता) । जैसा कि अनुमति समस्या लॉग निर्देशिका के साथ प्रतीत होती है, अंतिम पंक्ति को इसमें बदलें: ``
चलाने के लिए chmod आर 777 /var/www/html/app/कैश /var/www/html/app/लॉग

वह अतिरिक्त स्थान एक टाइपो था

क्या आपने इस मुद्दे को हल किया?

मैं आपकी समस्या को पुन: उत्पन्न करने में असमर्थ हूं । अगर मैं आपके डॉकरफाइल का उपयोग करता हूं और स्थानीय रूप से कुछ डमी फाइलें सेट करता हूं, तो अनुमतियां सही हैं और सब कुछ बस काम करता है । मैं एक कंटेनर बूट कर सकता हूं और एक वेब ब्राउज़र के माध्यम से सामग्री तक पहुंच सकता हूं । क्या आप विशिष्ट त्रुटि संदेशों को शामिल करने के लिए अपना प्रश्न अपडेट कर सकते हैं? क्या आप निश्चित हैं कि आपका अपाचे कॉन्फ़िगरेशन ' अपाचे 2।कॉन्फ) कोई समस्या पैदा नहीं कर रहा है? यदि आप अपाचे 2 ' स्थापित नहीं करते हैं तो क्या त्रुटियां दूर हो जाती हैं । conf?

यह आपके डॉकर कमांड को देखने में मददगार होगा जो निर्मित छवि को चलाता है ।