SSD Nodes Learn 🎉 VPS החל מ־$5.50/חודש
מדריכים Matt Connorמאת Matt Connor · עודכן 2026-08-13

התקנת Docker על Rocky Linux ועל AlmaLinux: מדריך מלא

למדו להתקין Docker Engine על Rocky Linux ו-AlmaLinux בעזרת dnf. המדריך פותר בעיות נפוצות כמו התנגשות עם Podman, חסימות SELinux ב-bind mounts ופרצות אבטחה ב-Firewalld.

התקנת Docker על Rocky Linux ועל AlmaLinux

כדי להתקין את Docker על Rocky Linux או על AlmaLinux, יש להוסיף את מאגר ה-dnf הרשמי של Docker, להתקין את המנוע יחד עם תוסף ה-compose, ולאחר מכן להפעיל את השירות. תהליך זה מורכב מארבע פקודות, והוא זהה בשתי ההפצות כיוון ששתיהן מבוססות על Red Hat Enterprise Linux (RHEL) וחולקות את אותו מבנה חבילות. CentOS Stream פועלת באותו אופן.

ההתקנה קצרה, לכן רוב המדריך הזה מתמקד בהבדלים בין Enterprise Linux (EL) לבין Ubuntu. ייתכן ש-Podman כבר תופס את הפקודה docker בתמונה שלכם. SELinux חוסם קבצים ב-bind-mount כל עוד אין להם את ה-label המתאים. Firewalld אינו מסנן פורטים ש-Docker מפרסם, לכן פורט של מכולה עלול להיות חשוף לאינטרנט בזמן ש-firewall-cmd מדווח ששום פורט אינו פתוח.

אל תשתמשו בסקריפט הנוחות של Docker מ-get.docker.com. התיעוד הרשמי של Docker מציין שהוא אינו מומלץ לסביבות production. הסקריפט משכתב את הגדרות המאגרים שלכם ללא אישור, ולא ניתן להריץ אותו שוב בבטחה לצורך שדרוג. הוספת המאגר באופן ידני מבטיחה ש-dnf upgrade יתייחס ל-Docker כמו לכל חבילה אחרת במערכת.

האם Podman כבר משיב לפקודת docker?

הפצות Rocky Linux ו-AlmaLinux כוללות את Podman במאגרים המוגדרים כברירת מחדל, ותמונות VPS רבות מתקינות אותו עבורכם. חלק מהתמונות מרחיקות לכת ומתקינות את podman-docker, אשר מציב סקריפט shell בנתיב /usr/bin/docker הקורא ל-Podman. כתוצאה מכך, כל פקודת docker שתקלידו תריץ את Podman במקום, ולכן מדריך שנכתב עבור Docker יפיק פלט שלא ציפיתם לו.

הסימן הראשון הוא כרזה (banner). הסקריפט /usr/bin/docker בודק את קיום הקובץ /etc/containers/nodocker, וכאשר הקובץ חסר, הוא מדפיס שורה אחת לפני הרצת הפעולה:

Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.

ייתכן שמישהו יצר את הקובץ הזה כדי להשתיק את הכרזה, לכן אל תסתמכו עליו בלבד. שאלו את מסד הנתונים של החבילות איזו חבילה מחזיקה בקובץ הבינארי:

command -v docker
rpm -qf "$(command -v docker)"

תשובה המתחילה ב-podman-docker מציינת ש-Podman הוא זה שמשיב. תשובה המתחילה ב-docker-ce-cli מציינת את Docker האמיתי. אם rpm -qf מדווח שאף חבילה אינה מחזיקה בקובץ, סימן שמישהו התקין אותו ידנית; עליכם לקרוא את הסקריפט לפני שתסמכו עליו.

Podman מריץ את אותן תמונות OCI ומהווה בחירה סבירה. אם אתם מעוניינים בו, עצרו כאן. אם אתם מעוניינים ב-Docker Engine, הסירו תחילה את החבילות המתנגשות. זו הרשימה ש-Docker מתעדת עבור RHEL:

sudo dnf remove docker docker-client docker-client-latest docker-common \
  docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc

קראו מה dnf מתכנן להסיר לפני שתאשרו. בתמונת VPS נקייה הרשימה קצרה. בשרת שמישהו כבר השתמש בו, הסרת podman עלולה להסיר גם את cockpit-podman או כלי אחר התלוי בו.

שמירה על Podman לצד Docker אפשרית עקרונית: הסירו רק את podman-docker, כך שהשם docker יהיה פנוי, ואת runc, שחבילת containerd.io מחליפה. התיעוד של Docker מתייחס ל-Podman כאל חבילה מתנגשת, לכן תצורה זו אינה נתמכת על ידי Docker. אם ההתקנה עדיין מדווחת על התנגשות, השתמשו ברשימת ההסרה המלאה שלעיל.

הוספת המאגר של Docker באמצעות dnf config-manager

Docker מפיצה חבילות RPM עבור Enterprise Linux בכתובת download.docker.com. קובץ המאגר מצביע על עץ ה-CentOS, שהוא העץ מולו מבצעות Rocky Linux ו-AlmaLinux את פתרון התלויות. נכון לאוגוסט 2026, Docker מתעדת מאגר זה עבור CentOS Stream 9 ו-CentOS Stream 10.

sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

גרסה 5 של dnf הסירה את הארגומנט --add-repo, לכן הפקודה השנייה נכשלת בהפצות חדשות יותר. בדקו איזו גרסה מותקנת אצלכם, ולאחר מכן בחרו את הפקודה המתאימה:

dnf --version

אם הפלט מציג גרסת 5.x, השתמשו בפורמט ה-subcommand במקום:

sudo dnf config-manager addrepo --from-repofile=https://download.docker.com/linux/centos/docker-ce.repo

שתי הפקודות כותבות את אותו הקובץ ל-/etc/yum.repos.d/docker-ce.repo. שימוש בפורמט שגוי יניב שגיאת unknown-argument במקום לבצע פעולה שגויה בשקט, כך שלא ניתן לפספס זאת.

קובץ המאגר מגדיר את baseurl לנתיב המכיל את $releasever, ו-dnf מרחיבה משתנה זה מתוך חבילת ה-release שלכם. Rocky Linux ו-AlmaLinux מגדירות אותו כמספר הגרסה המרכזי, כלומר 9 ב-EL 9 ו-10 ב-EL 10; זו הסיבה שמאגר של CentOS נפתר כראוי על מערכת Rocky. אשרו את ההרחבה לפני ההתקנה:

sudo dnf repoinfo docker-ce-stable

קראו את השורה Repo-baseurl. היא אמורה להסתיים ב-/9/x86_64/stable או ב-/10/x86_64/stable. אם ה-release שלכם מגדיר את $releasever לגרסת נקודה כגון 9.6, ה-dnf תדווח על Status code: 404 עבור כתובת ה-URL הזו בעת משיכת המטא-דאטה. תקנו זאת על ידי עריכת /etc/yum.repos.d/docker-ce.repo והחלפת $releasever במספר הגרסה המרכזי בלבד.

התקנת המנוע ותוסף ה-compose

sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

חמש חבילות, וכל אחת מבצעת תפקיד אחד. docker-ce הוא ה-daemon, dockerd. docker-ce-cli הוא הפקודה docker שאתם מקלידים. containerd.io הוא ה-container runtime שה-daemon מפעיל. docker-buildx-plugin בונה images. docker-compose-plugin מספק את docker compose כ-subcommand.

חבילות אלו אינן מתקינות קובץ בינארי עם מקף בשם docker-compose. זה היה Compose v1, שהגיע לסוף חייו ביולי 2023. כל מה שקורא ל-docker-compose עם מקף דורש עדכון ל-docker compose עם רווח.

ההתקנה הראשונה עוצרת כדי לייבא את מפתח החתימה של Docker ומציגה לכם את ה-fingerprint שלו. המפתח מגיע מ-gpgkey=https://download.docker.com/linux/centos/gpg בקובץ ה-repo שהוספתם זה עתה, לכן השוו את ה-fingerprint ש-dnf מדפיס מול ה-URL הזה לפני שתאשרו אותו.

כשל אחד מופיע לעיתים קרובות מספיק כדי לציין אותו. אם dnf מדווח ש-containerd.io דורש את container-selinux וששום דבר לא מספק אותו, מאגר ה-AppStream שלכם מושבת. הריצו את dnf repolist וודאו ש-appstream מופיע ברשימה, כיוון ששם container-selinux מופץ ב-EL 9 וב-EL 10.

הפעלת Docker ווידוא תקינותו

sudo systemctl enable --now docker
sudo systemctl status docker --no-pager
sudo docker run --rm hello-world

חבילות ה-RPM של Docker משאירות את ה-daemon במצב עצור ומושבת לאחר ההתקנה. זו הסיבה ששלב זה מופיע בדף ה-CentOS של Docker ולא בדף ה-Ubuntu, שבו ה-deb מפעיל את השירות עבורך. אם תדלג על enable, ה-Docker יפעל עד ה-reboot הבא, אך לאחר מכן יישאר כבוי ויגרור איתו את כל ה-containers.

הפקודה systemctl status אמורה להציג Active: active (running). ה-container מסוג hello-world אמור להדפיס This message shows that your installation appears to be working correctly. ולסיים את פעולתו. אם במקום זאת מופיעה שגיאת הרשאות ב-/var/run/docker.sock, סימן שדילגת על sudo, עניין שסעיף קבוצת ה-docker להלן פותר.

בדקו את ה-compose plugin בנפרד, כיוון שמדובר בחבילה שונה שעלולה להיות חסרה גם אם ה-engine תקין:

docker compose version

תשובה תקינה נראית כמו Docker Compose version v2.x.x. החזרת השירותים שלכם לפעולה לאחר reboot היא נושא נפרד מהפעלת ה-daemon, ו-מדיניות restart קובעת האם שירותי Compose יעלו מחדש בעת עליית המערכת.

מדוע bind mount מחזיר שגיאת permission denied?

הפצות Rocky Linux ו-AlmaLinux מריצות כברירת מחדל את SELinux (Security-Enhanced Linux) במצב enforcing. ניתן לאמת זאת באמצעות getenforce, שמציג את Enforcing.

מכולות Docker רצות תחת ה-type של SELinux בשם container_t, ו-type זה מורשה לקרוא ולכתוב רק קבצים המסומנים כ-container_file_t. ספרייה שיצרת בשרת המארח נושאת את התווית (label) של נתיב האב שלה, שאינה container_file_t. הגישה מהמכולה נחסמת, גם אם הבעלים, הקבוצה והרשאות ה-mode נראים תקינים מצד המארח. ניתן לשחזר זאת בשלוש פקודות:

sudo mkdir -p /srv/site
echo hello | sudo tee /srv/site/index.html
sudo docker run --rm -v /srv/site:/usr/share/nginx/html:ro nginx:alpine cat /usr/share/nginx/html/index.html

המכולה תציג:

cat: can't open '/usr/share/nginx/html/index.html': Permission denied

שתי פקודות יחשפו את הסיבה. ls -ldZ /srv/site מציגה את התווית, שעבור נתיב תחת /srv היא system_u:object_r:var_t:s0 ולא container_file_t. לאחר מכן, sudo ausearch -m avc -ts recent מציגה את רשומת ה-audit של ה-kernel, הכוללת את avc: denied { read }, שדה scontext= המציין את container_t, ושדה tcontext= המציין את התווית שראית על הספרייה. חוסר ההתאמה בין שני השדות הללו הוא כל העניין.

הפתרון הוא הוספת סיומת לארגומנט ה-volume. Docker תבצע תיוג מחדש (relabel) של הנתיב עבורך:

sudo docker run --rm -v /srv/site:/usr/share/nginx/html:ro,z nginx:alpine cat /usr/share/nginx/html/index.html

:z באותיות קטנות מתייגת את התוכן כמשותף (shared), כך שכמה מכולות יכולות להשתמש באותה ספרייה. :Z באותיות גדולות מתייגת אותו כפרטי ולא משותף (private), המקושר למכולה אחת בלבד, ומכולה שנייה שתנסה לקרוא את אותו נתיב תיחסם. השתמש ב-:z עבור כל מה ש-sidecar או מכולת גיבוי ניגשים אליו. השתמש ב-:Z עבור ספריית מסד נתונים שנמצאת בבעלות מכולה אחת.

התיעוד של Docker כולל אזהרה שחשוב לחזור עליה, כיוון שהתיוג מחדש הוא רקורסיבי. ביצוע bind-mount לספריית מערכת כמו /home או /usr עם :Z "יהפוך את השרת המארח לבלתי שמיש, וייתכן שתצטרך לתייג מחדש את קובצי המערכת ידנית". כוון סיומות אלו לספריות שיצרת עבור המכולה, לעולם לא לנתיבי מערכת.

ב-Compose הסיומת מתווספת לאותה מחרוזת:

services:
  web:
    image: nginx:alpine
    volumes:
      - /srv/site:/usr/share/nginx/html:ro,z

ישנן שתי מגבלות שקל להיתקל בהן. הדגל --mount אינו יכול להגדיר תווית SELinux כלל, לכן השתמש ב--v כשאתה זקוק לאחת. Named volumes אינם זקוקים לסיומת, כיוון ש-Docker מתייגת בעצמה את הספריות שהיא יוצרת תחת /var/lib/docker/volumes.

אל תכבה את SELinux. השתמש ב-sudo setenforce 0 רק כבדיקה של דקה אחת: אם המכולה עובדת לאחר מכן, הבעיה היא בתווית ו-:z הוא הפתרון. החזר את המצב לקדמותו עם sudo setenforce 1 מיד לאחר מכן. ב-Enterprise Linux, שגיאת permission denied ב-bind mount נובעת משתי סיבות נפרדות שנראות זהות מתוך המכולה. האחת היא תווית ה-SELinux. השנייה היא בעלות מספרית רגילה של משתמש וקבוצה, שזהו הדבר שמשתני PUID ו-PGID נועדו לפתור. ls -lnZ מציגה לך את ה-mode, הבעלים המספרי והתווית בשורה אחת, כך שתוכל לדעת מול מה אתה מתמודד.

מדוע פורט שפורסם נגיש למרות ש-firewalld נראה סגור?

Firewalld הוא ה-firewall המוגדר כברירת מחדל ב-Rocky Linux וב-AlmaLinux. בדקו שהוא רץ באמצעות sudo systemctl is-active firewalld. כעת פרסמו פורט ובדקו מה firewalld מדווח כפתוח:

sudo docker run -d --name web -p 8080:80 nginx:alpine
sudo firewall-cmd --list-ports

firewall-cmd מדפיס שורה ריקה. ממכונה אחרת, curl -I http://YOUR_SERVER_IP:8080/ מחזיר HTTP/1.1 200 OK. הפורט פתוח לאינטרנט וה-firewall שלכם לא מדווח על כך דבר.

הסיבה היא הנתיב שעוברת החבילה. חוקי ה-zone של firewalld מסננים תעבורה הממוענת למארח עצמו. פורט שפורסם אינו ממוען למארח: Docker מתקין חוק NAT (תרגום כתובות רשת) המשכתב את היעד לכתובת המכולה לפני שהחבילה מגיעה לנתיב ה-input של המארח, לכן ה-kernel מעביר (forward) את החבילה במקום למסור אותה מקומית. לאחר מכן, Docker מציב את ממשקי ה-bridge שלו ב-zone של firewalld שנקרא docker שהיעד שלו הוא ACCEPT, ומוסיף מדיניות העברה בשם docker-forwarding המאפשרת העברה מכל zone לתוך ה-zone של docker. חוקי ה-zone שלכם לעולם לא רואים את החבילה.

הפתרון הנקי ביותר אינו דורש חוק firewall. קשרו את צד המארח של הפרסום ל-loopback והציבו reverse proxy לפניו:

sudo docker rm -f web
sudo docker run -d --name web -p 127.0.0.1:8080:80 nginx:alpine
curl -I http://127.0.0.1:8080/

ה-curl המקומי מחזיר HTTP/1.1 200 OK ואותה בקשה ממכונה אחרת כבר לא מתחברת. כל מה שאין לו כתובת מארח בארגומנט -p מפורסם בכל הממשקים, לכן התייחסו ל--p 8080:80 חשוף כהחלטה לחשוף את השירות לציבור.

כאשר אתם זקוקים לשירות שיהיה נגיש מכתובות מסוימות ולא מאחרות, Docker שומר עבורכם שרשרת (chain). DOCKER-USER מעובד לפני חוקי ה-accept של Docker, לכן חוק שתציבו שם ישרוד אתחול של Docker ושכתוב של השרשראות שלו:

sudo iptables -I DOCKER-USER -i enp1s0 ! -s 203.0.113.10 -j DROP
sudo iptables -S DOCKER-USER

קחו את שם הממשק מ-ip route show default במקום להניח שמדובר ב-eth0, כיוון שגרסאות EL נוכחיות משתמשות בשמות כמו enp1s0 או ens3. ב-Rocky וב-AlmaLinux הפקודה iptables היא שכבת תאימות מעל nftables, והשרשראות של Docker גלויות דרכה. חוקים שנוספו בדרך זו נמחקים לאחר reboot אלא אם תשמרו אותם, לכן כתבו אותם לתוך יחידת systemd ברגע שאתם מרוצים מהם.

Docker Engine 28.0, ששוחרר ב-2025, סגר פרצה סמוכה: גישה ישירה מנותבת לפורטים של מכולות שמעולם לא פורסמו חסומה כעת בשרשרת DOCKER. שינוי זה אינו משפיע על פורטים שפורסמו, לכן כל האמור לעיל עדיין תקף בגרסאות נוכחיות. כדאי לאמץ הרגל תפעולי אחד: לאחר כל sudo firewall-cmd --reload, בדקו שוב פורט שפורסם. אם הוא הפסיק להגיב, sudo systemctl restart docker יתקין מחדש את החוקים של Docker.

מנהלי מערכות Ubuntu נתקלים באותו קיר דרך כלי אחר, כפי שמוסבר ב-מדוע פורטי Docker שפורסמו מתעלמים מחוקי ufw. נתיב ה-NAT הוא הסיבה בשני המקרים. רק ה-firewall שלפניו משתנה.

הוספת משתמש שאינו root לקבוצת docker

הקלדת sudo לפני כל פקודת docker הופכת למעיקה עם הזמן, והוספה לקבוצת docker מייתרת צורך זה:

sudo usermod -aG docker $USER
newgrp docker
docker run --rm hello-world

הפקודה usermod -aG עורכת את /etc/group, אך ה-shell הנוכחי שלך כבר מחזיק ברשימת הקבוצות שלו, לכן השינוי לא יחול עד שתפתח shell חדש. הפקודה newgrp docker מפעילה shell עם הקבוצה המצורפת כדי שתוכל לבדוק זאת מיד. חיבורי SSH חדשים יזהו את השינוי באופן אוטומטי.

היה מודע למשמעות ההרשאות של קבוצה זו. חברות בקבוצה מעניקה גישת כתיבה ל-/var/run/docker.sock, וכל תהליך שיכול לתקשר עם socket זה יכול לבקש מה-daemon להריץ container שמבצע mount למערכת הקבצים של ה-host. פקודה אחת ממחישה מה זה אומר:

docker run --rm -v /:/host alpine wc -l /host/etc/shadow

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

Docker מציעה גם מצב rootless המריץ את ה-daemon כמשתמש ללא הרשאות. זהו נתיב התקנה נפרד המשנה את אופן הפעולה של מנהלי האחסון ושל פורטים מתחת ל-1024, לכן תכנן זאת כפרויקט נפרד ולא כדגל (flag) שמוסיפים בשלב מאוחר יותר.

צעדים הבאים

כעת ברשותך המנוע, תוסף ה-compose, שירות ששורד אתחול, ושלושת המאפיינים הספציפיים ל-EL שתועדו לעיל. הצעד הבא הוא הגדרת compose.yaml לכל שירות, והמדריך מבנה קובץ Compose סוקר את פורמט הקובץ ואת הפקודות המפעילות אותו. אם זהו מארח המכולות הראשון שלך, המדריך הרצת Docker על גבי VPS מכסה את סוגיות הגודל, האחסון ותחזוקת האימג'ים שהמדריך הנוכחי אינו כולל.

FAQ

האם מאגר ה-CentOS של Docker עובד על Rocky Linux ו-AlmaLinux?

כן. יש להוסיף את https://download.docker.com/linux/centos/docker-ce.repo באמצעות dnf config-manager. ה-baseurl בקובץ זה מכיל את $releasever, ו-Rocky Linux ו-AlmaLinux מרחיבות אותו למספר הגרסה המרכזית. כך, שרת EL 9 יפנה לעץ של CentOS 9 ושרת EL 10 לעץ של CentOS 10. ניתן לאמת את ההרחבה באמצעות sudo dnf repoinfo docker-ce-stable ולקרוא את השורה Repo-baseurl. שגיאת Status code: 404 בעת משיכת מטא-דאטה על ידי dnf מעידה על כך שהמשתנה הורחב לגרסת נקודה ספציפית; עריכת /etc/yum.repos.d/docker-ce.repo לשימוש במספר הגרסה המרכזית בלבד פותרת זאת.

האם ניתן להתקין Docker ו-podman על אותו שרת?

התיעוד של Docker מציין את podman ו-runc כחבילות מתנגשות ומנחה להסיר את שתיהן לפני התקנת Docker Engine. ההתנגשות המעשית היא בחבילת podman-docker, אשר מחזיקה ב-/usr/bin/docker והופכת כל פקודת docker לפקודת podman. יש להריץ rpm -qf "$(command -v docker)" כדי לראות איזו חבילה מחזיקה בנתיב זה. אם הפלט מתחיל ב-podman-docker, סימן ש-podman משיב לבקשות. החזקת שני המנועים אינה תצורה ש-Docker תומכת בה, לכן בשרת ייצור, יש לבחור באחד מהם.

מדוע אני מקבל שגיאת permission denied ב-bind mount של מכולה?

SELinux מופעל כברירת מחדל ב-Rocky Linux וב-AlmaLinux. מכולות רצות תחת הטיפוס container_t ומורשות לגשת רק לקבצים המסומנים כ-container_file_t. לכן, תיקייה שיצרת נושאת תווית שגויה והגישה נחסמת ללא קשר לבעלים או להרשאות הקובץ. ניתן לאמת זאת באמצעות ls -ldZ על נתיב המארח ו-sudo ausearch -m avc -ts recent, שמדפיס avc: denied עם שני ההקשרים שאינם תואמים. יש להוסיף :z לארגומנט ה-volume עבור תוכן משותף בין מכולות, או :Z עבור תוכן פרטי למכולה אחת. לעולם אין להפנות את :Z ל-/home או ל-/usr, כיוון שהגדרת התוויות מחדש היא רקורסיבית ותגרום נזק למערכת המארחת.

האם עלי לפתוח פורט ב-firewalld כדי לפרסם פורט של מכולה?

לא, וזו בדיוק הבעיה. חוק ה-NAT של Docker משכתב את כתובת היעד לפני שהחבילה מגיעה לנתיב ה-input של המארח, ולכן חוקי ה-zone של firewalld לעולם לא בודקים אותה. Docker גם מציבה את ה-bridges שלה ב-zone של firewalld בשם docker עם יעד ACCEPT. מכולה שהופעלה עם -p 8080:80 נגישה מהאינטרנט בעוד ש-sudo firewall-cmd --list-ports לא מדפיס דבר. יש לפרסם לכתובת ספציפית באמצעות -p 127.0.0.1:8080:80 כאשר רק המארח אמור לגשת לשירות, או להוסיף חוקי סינון לשרשרת DOCKER-USER, ש-Docker מעבדת לפני חוקי ה-accept שלה.

האם הוספת המשתמש שלי לקבוצת docker היא בטוחה?

פעולה זו מעניקה הרשאות root. חבר בקבוצת docker יכול לכתוב ל-/var/run/docker.sock, ו-docker run --rm -v /:/host alpine wc -l /host/etc/shadow יקרא לאחר מכן קובץ שנגיש ל-root בלבד מחשבון ללא הרשאות sudo. התיעוד שלאחר ההתקנה של Docker מציין שוויון זה. יש להוסיף רק חשבונות שאתה כבר סומך עליהם עם sudo, ולהמשיך להשתמש ב-sudo docker עבור חשבונות משותפים או חשבונות שירות. מצב Rootless הוא החלופה כאשר נדרשות מכולות תחת משתמש ללא הרשאות, וזהו נתיב התקנה נפרד ולא רק הגדרה.