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