डॉकर कंटेनर में फ़ाइल कैसे जोड़ें जिसमें कोई रूट अनुमति नहीं है?

मैं आधिकारिक से निर्मित डॉकर छवि में एक फ़ाइल जोड़ने का प्रयास कर रहा हूं tomcat छवि। उस छवि में रूट अधिकार नहीं हैं, क्योंकि मैं उपयोगकर्ता के रूप में लॉग इन हूं tomcat अगर मैं बैश चलाता हूं:

docker run -it tomcat /bin/bashtomcat@06359f7cc4db:/usr/local/tomcat$ 

अगर मैं एक हिदायत Dockerfile फ़ाइल को उस कंटेनर में कॉपी करने के लिए, फ़ाइल में अनुमतियां हैं 644 और मालिक है root. जहां तक मैं समझता हूं, यह उचित प्रतीत होता है क्योंकि डॉकरफाइल में सभी कमांड रूट के रूप में चलाए जाते हैं । हालांकि, अगर मैं उस फ़ाइल के स्वामित्व को बदलने की कोशिश करता हूं tomcat:tomcat, मुझे एक मिलता है Operation not permitted त्रुटि।

मैं उस छवि में कॉपी की गई फ़ाइल की अनुमतियों को क्यों नहीं बदल सकता?

कैसे यह reproduced किया जा सकता है:

mkdir docker-addfilepermissioncd docker-addfilepermissiontouch test.txtecho 'FROM tomcatCOPY test.txt /usr/local/tomcat/webapps/RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt' > Dockerfiledocker build .

का उत्पादन docker build .:

Sending build context to Docker daemon 3.072 kBSending build context to Docker daemon Step 0 : FROM tomcat ---> 44859847ef64Step 1 : COPY test.txt /usr/local/tomcat/webapps/ ---> Using cache ---> a2ccb92480a4Step 2 : RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt ---> Running in 208e7ff0ec8fchown: changing ownership of '/usr/local/tomcat/webapps/test.txt': Operation not permitted2014/11/01 00:30:33 The command [/bin/sh -c chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt] returned a non-zero code: 1

टॉमकैट के लिए डॉकरफाइल को देखने और बदलने का एक तरीका है, लेकिन मैं कुछ मिनटों के बाद इसका पता नहीं लगा सकता । मेरा सुरुचिपूर्ण समाधान चाउ से पहले इस लाइन को जोड़ना है:

USER root

यदि आप (जो अनुशंसित है) के बाद विशेषाधिकारों को कम करना चाहते हैं तो आप इस पंक्ति को जोड़ सकते हैं:

USER tomcat

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

चूंकि डॉकर 17.09 का उपयोग कर सकता है --chown डॉकरफाइल में ऐड/कॉपी ऑपरेशंस पर फ्लैग करें, चाउ के साथ एक अलग रन ऑपरेशन के बजाय ऐड/कॉपी स्टेप में मालिक को बदलने के लिए जो आपके द्वारा नोट की गई छवि के आकार को बढ़ाता है । यह डिफ़ॉल्ट मोड के रूप में होना अच्छा होता यानी फ़ाइलों की प्रतिलिपि बनाने वाले उपयोगकर्ता की अनुमतियां कॉपी की गई फ़ाइलों पर लागू होती हैं । हालांकि, डॉकर टीम पिछड़ी संगतता को तोड़ना नहीं चाहती थी और इसलिए एक नया झंडा पेश किया ।

COPY --chown=<user>:<group> <hostPath> <containerPath>

अन्य विकल्प हैं:

  1. छवि बनाने से पहले एक स्टेजिंग फ़ोल्डर में अनुमति बदलें ।
  2. कंटेनर को बूटस्ट्रैप स्क्रिप्ट के माध्यम से चलाएं जो स्वामित्व को बदलता है ।
  3. परतों स्क्वैश!