2015-03-05 7 views
21

निम्नलिखित Dockerfileडोकर कॉपी और परिवर्तन मालिक

FROM ubuntu 
RUN groupadd mygroup 
RUN useradd -ms /bin/bash -G mygroup john 
MKDIR /data 
COPY test/ /data/test data 
RUN chown -R john:mygroup /data 
CMD /bin/bash 

अपने परीक्षण निर्देशिका में, जो कॉपी किया जाता है मैं 770

करने के लिए फ़ाइल अनुमति सेट किया है, तो मैं अपने कंटेनर के अंदर एक su john कर देखते हुए, मैं मेरी परीक्षण निर्देशिका में किसी भी फाइल या उपनिर्देशिका का उपयोग नहीं कर सकता। ऐसा लगता है कि यह समस्या aufs फाइल सिस्टम में स्वामित्व से संबंधित है, जहां कॉपी की गई निर्देशिका अभी भी रूट और अनुमतियों के स्वामित्व में है 770 पर सेट की गई है।

क्या इस समस्या के लिए अनुमतियों को सही तरीके से सेट करने के लिए कोई समाधान है? कोई भी इसे कॉपी करने से पहले कंटेनर उपयोगकर्ता के यूआईडी में मूल निर्देशिका की अनुमतियां सेट कर सकता है। लेकिन यह एक हैक की तरह लगता है।

+0

'कॉपी' और 'एमकेडीआईआर' से पहले मुझे लगता है कि आपके पास 'यूजर जॉन' – user2915097

+0

होना चाहिए शायद यह काम कर सकता है, लेकिन मुझे पूरी निर्देशिका संरचना बनाना होगा जो कॉपी किया गया है और इसलिए यह स्वीकार्य नहीं है। –

उत्तर

4

मुझे लगता है कि मुझे एक समाधान मिला, जो काम करता है। डेटा वॉल्यूम कंटेनर का उपयोग करना चाल करेगा।

FROM busybox 
RUN mkdir /data 
VOLUME /data 
COPY /test /data/test 
CMD /bin/sh 

अपने आवेदन कंटेनर में, जहां मैं अपने उन है, यह

FROM ubuntu 
RUN groupadd mygroup 
RUN useradd -ms /bin/bash -G mygroup john 
COPY setpermissions.sh /root/setpermissions.sh 
CMD /root/setpermissions.sh && /bin/bash 

setpermissions की तरह कुछ दिखाई दे सकता है जो: सबसे पहले मैं डेटा की मात्रा कंटेनर, जो मेरी बाहरी निर्देशिका के प्रति होता है बनाने स्क्रिप्ट उपयोगकर्ता अनुमतियों की स्थापना के काम करता है:

#!/bin/bash 

if [ ! -e /data/.bootstrapped ] ; then 
    chown -R john:mygroup /data 
    touch /data/.bootstrapped 
fi 

अब मैं सिर्फ जब आवेदन कंटेनर चल --volumes-from <myDataContainerId> उपयोग करना होगा।

+0

यह वही है जो आपने पहले किया था। आपको अन्य उत्तर को सही के रूप में स्वीकार करने पर विचार करना चाहिए। यह स्क्रिप्टिंग के बिना इसके लिए एक आधिकारिक डॉकर ध्वज का उपयोग करता है। –

17

एक --chown झंडा अंत में COPY में जोड़ा गया है:

COPY --chown=patrick hostPath containerPath 

इस नई वाक्य रचना डोकर 17.09 पर काम करने लगता है।

अधिक जानकारी के लिए the PR देखें।

+0

मेरे लिए यह '--chown = user: group' के साथ काम करता है, मेरे पास उस उपयोगकर्ता और समूह को कंटेनर में बनाया गया था – Charan

संबंधित मुद्दे