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


16

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

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

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

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

इसे कैसे पुन: पेश किया जा सकता है:

mkdir docker-addfilepermission
cd docker-addfilepermission
touch test.txt
echo 'FROM tomcat
COPY test.txt /usr/local/tomcat/webapps/
RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt' > Dockerfile

docker build .

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

Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon 
Step 0 : FROM tomcat
 ---> 44859847ef64
Step 1 : COPY test.txt /usr/local/tomcat/webapps/
 ---> Using cache
 ---> a2ccb92480a4
Step 2 : RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt
 ---> Running in 208e7ff0ec8f
chown: changing ownership of '/usr/local/tomcat/webapps/test.txt': Operation not permitted
2014/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

जवाबों:


20

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

USER root

यदि आप विशेषाधिकारों को डी-एलिवेट करना चाहते हैं (जो अनुशंसित है) तो आप इस लाइन को जोड़ सकते हैं:

USER tomcat

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


यह वास्तव में काम करता है! क्या आप संयोग से जानते हैं कि ADD और COPY कमांड स्वामी के साथ फाइल क्यों बनाते हैं root? वे USERनिर्देश को ध्यान में क्यों नहीं रखते हैं ?
नवमी

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

धन्यवाद। मुझे अपने दुख से बाहर निकालो। मुझे जेनकिंस छवि में ssh कुंजियाँ जोड़ने की आवश्यकता थी।
कोस्टास डेमीरिस

8

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

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

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

  1. छवि बनाने से पहले मंचन फ़ोल्डर में अनुमति बदलें।
  2. एक बूटस्ट्रैप स्क्रिप्ट के माध्यम से कंटेनर को चलाएं जो स्वामित्व को बदलता है।
  3. परतों को स्क्वैश करें!
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.