تغيير أذونات وحدات التخزين المسماة في عامل الميناء

لدي حاوية عامل ميناء مع وحدة تخزين مسماة تعمل على مستخدم غير الجذر بدأت مع الأمر التالي:

docker run -v backup:/backup someimage

في الصورة ، هناك برنامج نصي النسخ الاحتياطي الذي يحاول حفظ الملفات في /backup الدليل لكنه فشل. شنت backup حجم في /backup دير ينتمي إلى المستخدم الجذر.

كيفية تغيير الأذونات ل /backup دليل?

----- تحرير 1:

مكف أدناه:

تشغيل حاوية عامل الميناء مع جيريت:

docker run -v backupgerrit:/backup --name gerrit gerritcodereview/gerrit

الآن على نافذة المحطة الطرفية الأخرى في محاولة لحفظ شيء في /backup دير:

docker exec gerrit touch /backup/testfile

سوف تحصل:

touch: cannot touch '/backup/testfile': Permission denied

تتم تهيئة وحدات التخزين المسماة عند إنشائها لأول مرة لمحتويات الصورة في موقع التحميل. تتضمن هذه التهيئة المالك والأذونات. إذا /backup غير موجود في صورتك ، ثم سيتم إنشاء دليل فارغ ومملوك من قبل الجذر. يمكنك:

الخيار 1: إنشاء الدليل في دوكيرفيل الخاص بك مع الملكية والأذونات المناسبة:

FROM your-imageUSER rootRUN mkdir -p /backup \ && chown -R your-user /backupUSER your-user

ملاحظة ، هذا يعمل فقط عندما تكون النسخة الاحتياطية المسماة وحدة التخزين غير موجودة بالفعل أو فارغة. ويجب أن يكون حجم اسمه ، وليس حجم المضيف.

الخيار 2: تهيئة وحدة التخزين المسماة ، بما في ذلك بعض المحتوى داخل وحدة التخزين (سيعمل ملف فارغ) باستخدام حاوية مؤقتة أخرى:

docker run --rm -v backupgerrit:/backup busybox \  /bin/sh -c 'touch /backup/.initialized && chown -R 1000:1000 /backup'

الخيار 3: اضبط الأذونات بعد تثبيت مستوى الصوت ، مما يتطلب الجذر داخل الحاوية:

docker exec -u 0:0 your-container chown -R your-user /backup

حل العمل هنا. عامل الميناء على الإعدادات الافتراضية يحتفظ وحدات التخزين البيانات في /var/lib/docker/volumes/. مستندة على سبيل المثال من ملفات سؤال backupgerrit حجم اسمه والحفاظ على /var/lib/docker/volumes/backupgerrit/_data. دير أساسي هو _data وأذوناتها. في هذا المثال ، يستخدم حاوية جيريت مستخدم مع معرف 1000. الحل هو تعيين ملكية هذا _data دير ل 1000:1000.

# chown 1000:1000 /var/lib/docker/volumes/backupgerrit/_data# ls -ln /var/lib/docker/volumes/backupgerrit/drwxr-xr-x 2 1000 1000 4096 Feb 25 12:19 _data/

وهذه هي الطريقة التي تبدو من جانب الحاوية:

# docker psCONTAINER ID   IMAGE                     COMMAND            CREATED          STATUS          PORTS                 NAMESeaa816980be5   gerritcodereview/gerrit   "/entrypoint.sh"   31 minutes ago   Up 31 minutes   8080/tcp, 29418/tcp   gerrit# docker exec gerrit iduid=1000(gerrit) gid=1000(gerrit) groups=1000(gerrit)# docker exec gerrit ls -l / | grep backupdrwxr-xr-x   2 gerrit gerrit 4096 Feb 25 11:19 backup# docker exec gerrit touch /backup/testfile# docker exec gerrit ls -l /backuptotal 0-rw-r--r-- 1 gerrit gerrit 0 Feb 25 11:19 testfile

أذونات _data دير مستمرة حتى إزالة حجم مع

# docker volume rm backupgerrit