لدي حاوية عامل ميناء مع وحدة تخزين مسماة تعمل على مستخدم غير الجذر بدأت مع الأمر التالي:
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