كيفية إضافة ملف إلى حاوية عامل الميناء الذي لا يوجد لديه أذونات الجذر?

أحاول إضافة ملف إلى صورة عامل ميناء بنيت من المسؤول tomcat الصورة. لا يبدو أن هذه الصورة لها حقوق الجذر ، حيث قمت بتسجيل الدخول كمستخدم tomcat إذا ركضت باش:

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

إذا كنت إرشاد Dockerfile لنسخ ملف إلى تلك الحاوية ، يحتوي الملف على أذونات 644 والمالك هو root. بقدر ما أفهم ، يبدو أن هذا معقول كما يتم تشغيل جميع الأوامر في دوكيرفيل كجذر. ومع ذلك ، إذا حاولت تغيير ملكية هذا الملف إلى tomcat:tomcat، أحصل على Operation not permitted خطأ.

لماذا لا يمكنني تغيير أذونات الملف المنسوخ إلى تلك الصورة?

كيف يمكن استنساخها:

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. الاسكواش الطبقات!