פתרון בעיות אישור אסור ב־Docker

הפעלת אפליקציות עם Docker כחלק מהיומיום עשויה להפוך לסיוט כאשר אתה נתקל בשגיאה כגון אישור גישה נדחה של Docker בעת ניסיון להתחבר. אך אל תדאג, מאמר זה יעזור לך לחזור לתפקוד במהירות.

במדריך זה, תלמד דרכים רבות לפתור את ההודעת שגיאת אישור הגישה הנרדם של Docker.

דרישות מראש

מדריך זה כולל הדגמות מעשיות. כדי לעקוב, הקפד לוודא שיש לך את הבאים במקום:

  • הדגמות במדריך זה רצות על Ubuntu 20.04, אך הפצות Linux אחרות גם יעבדו.
  • מנוע Docker, עם גרסת המדריך 20.10.8, בנייה 3967b7d.

הרצת פקודות Docker מוגברות

גורמים רבים עשויים להביא לשגיאת אישור גישה נדחית במהלך התחברות ל-Docker. אחד מהם הוא שייתכן כי אתה מריץ פקודות Docker בלי לקודם להם את הפקודה sudo. פקודת ה-sudo היא אשר נותנת לך זכויות מנהל מוגברות יחד עם פריבילגיות אבטחה בעת הרצת פקודות.

למטה, תוכל לראות את השגיאת אישור הגישה הנרדם עשויה ניסיון להריץ פקודת docker.

Running into a permission denied error

הפעל את הטרמינל שלך והוסף בתחילתו sudo לפקודת ה-docker למטה כדי להריץ את תמונת ה-Docker hello-world. מכיוון שאתה מריץ פקודה מוגברת, תצטרך להזין את הסיסמה שלך כדי להמשיך.

sudo docker run hello-world

תראה פלט דומה לזה שמוצג למטה שמצביע על כך ש-Docker מותקן כראוי.

Running Elevated (sudo) Docker Commands

הפעלה מחדש של מנוע ה-Docker

אם הרצת פקודות Docker מוגברות לא פותרת את השגיאה אין הרשאה, אמת שה-Docker Engine שלך פועל. בדומה להרצת פקודת docker בלי הפקודה sudo, מנוע Docker שנעצר מפעיל את שגיאת אין הרשאה. איך אתה מתקן את השגיאה? על ידי הפעלה מחדש של מנוע ה-Docker שלך.

הרץ את פקודת ה-systemctl למטה כדי לאמת את מצבו של מנוע ה-Docker (status docker) ואם הוא פועל.

sudo systemctl status docker

למטה, אתה יכול לזהות שמנוע ה-Docker פועל מהסטטוס המוחזר שמראה פעיל (מריץ).

Displaying Docker Engine status

אם מנוע ה-Docker אינו פעיל, הרץ את פקודת ה-systemctl למטה כדי להפעיל את מנוע ה-Docker (start docker).

sudo systemctl start docker

עכשיו, הריצו את פקודת ה- hello-world של Docker כפי שעשיתם בקטע "הרצת פקודות Docker מוגברות" כדי לוודא שהשגיאה פתורה.

sudo docker run hello-world

הוספת חשבון משתמש לקבוצה עם גישה של משתמש לא-רוט

אישרתם שהמנוע של Docker פועל, אך עדיין מקבלים שגיאת הרשאה נדחתה של Docker? אם כן, עליכם להוסיף את חשבון המשתמש שלכם לקבוצה עם גישת משתמש לא-רוט. למה? מכיוון שכל פקודת Docker שתריצו על מכונת Linux שאינה בקבוצת המשתמשים מפעילה שגיאת הרשאה נדחתה.

  1. הריצו את הפקודה groupadd למטה כדי ליצור קבוצה חדשה בשם docker. הזינו את הסיסמה שלכם כדי להמשיך ולהריץ את הפקודה.
sudo groupadd docker

אם קבוצת ה- docker קיימת בקבוצת המשתמשים, תראו פלט דומה לזה שמופיע למטה.

Creating a New Group Named ‘docker’

2. לאחר מכן, הריצו את הפקודה usermod למטה כאשר אפשרויות ה- -aG מסבירות לפקודה להוסיף את חשבון המשתמש שלכם (programmer) לקבוצה (docker). הפקודה הזו מאפשרת לחשבון המשתמש שלכם לקבל גישת משתמש לא-רוט.

sudo usermod -aG docker programmer

3. הריצו את הפקודה newgrp למטה כדי לשנות את זיהוי הקבוצה האמיתית הנוכחית לקבוצת ה- docker.

הריצו את הפקודה הזו בכל פעם שתרצו להריץ את Docker כמשתמש לא-רוט.

sudo newgrp docker 

4. לבסוף, הפעל מחדש את דוקר העולם החדש כדי לאשר אם אתה כבר לא רואה את השגיאה. אם, בנקודה זו, עדיין מתקבלת שגיאה, יש לשקול לתת יותר גישה לקובץ docker.sock. קובץ docker.sock הוא קובץ מתקשר UNIX, אמצעי לתקשורת בין מידע תהליכים בין המשתמש והמערכת, שבו דוקר הדמון קורא לכניסה של ממשק ה- API של דוקר.

הפעל את הפקודה chmod למטה כדי להעניש לכל המשתמשים גישה לקריאה/כתיבה (666) לקובץ /var/run/docker.sock. כעת הפעל מחדש את דוקר העולם החדש כדי לראות אם השגיאה פתורה.

sudo chmod 666 /var/run/docker.sock

עריכת קובץ היחידה של שירותי דוקר

אם הפעלת דוקר כמשתמש שאינו מנהל אינה מספיקה לתקן את השגיאה, נסה לערוך את קובץ היחידה של שירותי דוקר של SystemD, מערכת שליטת שירות, . הקובץ שירות של דוקר מכיל פרמטרים רגישים שיכולים לשנות את ההתנהגותו של דוקר הדמון. ניתן לשנות את ההתנהגות ברירת המחדל של קובץ היחידה של דוקר על ידי הוספת פקודה נוספת לשינוי ההתנהגות ברירת המחדל של השירות.

1. הפעל את הפקודה למטה כדי לפתוח את קובץ היחידה של שירותי דוקר בעורך טקסט מועדף עליך. לדוגמה, קובץ השירות של דוקר נפתח בעורך הטקסט nano בדוגמה זו.

sudo nano /usr/lib/systemd/system/docker.service

2. איתור האזור עם הכותרת [Service] בתוך קובץ היחידה של שירות ה-Docker, כפי שמוצג למטה. העתק/הדבק את הפקודות לתוך קובץ היחידה של שירות ה-Docker ושמור את השינויים.

למטה, הפקודה SupplementaryGroups מגדירה את קבוצות ה-Unix הנוספות למיקום בו מבוצעים התהליכים. בו זמנית, הפקודה ExecStartPost מבצעת ניקוי של פעולות שמבוצעות גם אם השירות נכשל בהתחלה נכונה.

SupplementaryGroups=docker    
ExecStartPost=/bin/chmod 666 /var/run/docker.sock
Editing the Docker Service Unit File

3. כעת, הפעל את הפקודות למטה כדי לאתחל מחדש ולהפעיל את שירות ה-Docker. פעולה זו מאפשרת לך להתחיל את שירות ה-Docker מחדש כדי למנוע שגיאות בעת הרצת פקודות Docker.

# מטען מחדש של כל קבצי היחידה של Docker ויצירה מחדש של עץ התלות כולו.
sudo systemctl daemon-reload
# איתחול מחדש של שירות ה-Docker
sudo systemctl start docker
# הפעלת Docker לרוץ על המחשב שלך.
sudo systemctl enable docker

4. לבסוף, הפעל מחדש את תמונת ה-Docker של hello-world וראה אם עדיין מקבלים את שגיאת ההרשאה נדחת.

הרצת Docker במצב פריבילגי

לאחרונה, ברשימה לתיקון שגיאת ההרשאה הנדחתת של Docker היא הרצת Docker ב-מצב פריבילגי. בביצוע פעולה זו, ניתן לקונטיינר Docker גישת root למערכת.

הרצת Docker במצב פריבילגי היא פעולה מסוכנת ופוגעת בפני תקיפות מההוקרים. לכן עליך להיות זהיר ולהריץ את Docker במצב פריבילגי רק כאשר יש לך הבנה מדויקת של מה שאתה עושה.

1. הפעל את הפקודה למטה כדי לרשום את כל ה־Docker קונטיינרים במערכת שלך ולקבל את זיהוי ה־ID של הקונטיינר שברצונך להפעיל.

sudo docker ls -a
Listing all Docker Containers in the System

2. לאחר מכן, הפעל את הפקודה docker inspect למטה כדי לבדוק אם הקונטיינר שברצונך להפעיל כבר נמצא במצב פריוולגיה (--format='{{.HostConfig.Privileged}}'). החלף את CONTAINER_ID למטה עם זיהוי הקונטיינר האמיתי שלקחת הערות עליו בשלב הראשון.

docker inspect --format='{{.HostConfig.Privileged}}' CONTAINER_ID

אם הקונטיינר נמצא במצב פריוולגיה, הפקודה תחזיר ערך true לקונסולה. אם הפקודה מחזירה ערך שקר, כפי שמוצג למטה, עבור לשלב הבא.

Checking if a Container is in Privileged Mode

3. לבסוף, הפעל את הפקודה docker למטה כדי להפעיל את קונטיינר ה־Docker במצב פריוולגיה (--privileged hello-world).

sudo docker run --privileged hello-world

סיכום

במהלך המדריך הזה, למדת דרכים רבות לפתור את שגיאת הרשאה נדחית של Docker, מהרצת פקודות מורגבות עד להפעלת Docker במצב פריוולגיה.

עכשיו אתה יודע איך להיפטר משגיאה בניית יישומי Docker; אולי אתה רוצה גם לשמור על ניקיון התמונות של Docker בכל עת?


בנוסף:

Source:
https://adamtheautomator.com/docker-permission-denied/