خانه » نحوه اجرای Docker به عنوان کاربر غیر روت در لینوکس
DevOPS آموزش

نحوه اجرای Docker به عنوان کاربر غیر روت در لینوکس

نصب Docker در اوبونتو بسیار آسان است! همه افراد، حتی افراد تازه کار، می توانند آن را در عرض 15 دقیقه نصب کنند. پس از نصب Docker، متوجه شدم که نمی‌توانم اکثر عملیات Docker را به عنوان یک کاربر معمولی انجام دهم. من باید Docker را هر بار با کاربر root یا با مجوز sudo به عنوان کاربر غیر ریشه اجرا کنم در غیر اینصورت با خطای زیر مواجه می شوم:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://var/run/docker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied

به عنوان مثال، من می خواستم نسخه Docker را به عنوان کاربر عادی با استفاده از دستور بررسی کنم:

$ docker version

و این پیغام خطا را دریافت می کنم:

Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b7f0
Built: Wed Mar 11 01:25:46 2020
OS/Arch: linux/amd64
Experimental: false
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://var/run/docker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied

اما وقتی همان دستور را با مجوز sudo اجرا می کنم.

$ sudo docker version

همانطور که در خروجی زیر نشان داده شده است، تمام جزئیات نسخه فعلی Docker نصب شده را نشان می دهد.

Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b7f0
 Built:             Wed Mar 11 01:25:46 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b7f0
  Built:            Wed Mar 11 01:24:19 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

پس از جستجو در صفحه Docker documentation، متوجه شدم که Daemon Docker به جای پورت TCP به طور پیش فرض به سوکت یونیکس می شود. از آنجایی که آن سوکت یونیکس متعلق به کاربر ریشه است، دایمون داکر فقط به عنوان کاربر اصلی اجرا می شود. از این رو، کاربران عادی نمی توانند اکثر دستورات Docker را انجام دهند.

اگر می خواهید Docker را به عنوان کاربر غیر ریشه در لینوکس اجرا کنید، باید مراحل زیر را انجام دهید. من این را روی سرور اوبونتو 18.04 تست کردم و به خوبی کار کرد! همچنین باید روی سایر توزیع های لینوکس نیز کار کند.

هشدار مهم:

اجرای Docker به عنوان کاربر معمولی ایده خوبی برای امنیت نیست. من شخصاً از این استفاده نمی کنم و آن را نیز توصیه نمی کنم . اگر سیستم شخصی شما باشد و سیستم خود را در معرض اینترنت قرار ندهید، مشکل بزرگی نیست. با این حال، Docker را به عنوان کاربر غیر ریشه در یک سیستم عملیاتی اجرا نکنید.

Docker را به عنوان کاربر غیر ریشه در لینوکس اجرا کنید

برای رفع خطای Docker Permission Denied و استفاده از Docker به عنوان کاربر غیر ریشه، گروهی به نام Docker با دستور زیر ایجاد کنید:

$ sudo groupadd docker

در مرحله بعد، کاربر خود را به گروه docker اضافه کنید :

$ sudo usermod -aG docker $USER

پس از افزودن کاربر به گروه docker، از سیستم خارج شوید و دوباره وارد شوید تا تغییرات اعمال شود.

همچنین، دستور زیر را برای اعمال تغییرات در گروه ها اجرا کنید:

$ newgrp docker

از این پس، کاربر عادی (غیر روت) می تواند بدون مجوز sudo از Docker استفاده کند.

اجازه دهید دستورات زیر را به عنوان کاربر عادی اجرا کنم:

$ docker version
$ docker run hello-world

خروجی نمونه:

Docker را به عنوان کاربر غیر ریشه در لینوکس اجرا کنید

اکنون می توانم هر دو دستور Docker را بدون اجازه sudo اجرا کنم.

فقط در صورتی که قبلاً چند دستور Docker را با مجوز ‘sudo’ قبل از اضافه کردن کاربر خود به گروه Docker اجرا کرده اید، احتمالاً خطای مشابه زیر را مشاهده خواهید کرد.

WARNING: Error loading config file: /home/user/.docker/config.json -
stat /home/user/.docker/config.json: permission denied

پیام خطای بالا نشان می دهد که ~/.docker/ دایرکتوری شما به دلیل استفاده از sudo با مجوزهای نادرست ایجاد شده است.

برای رفع این مشکل، مالکیت و مجوزهای این دایرکتوری را با استفاده از دستورات زیر تغییر دهید:

$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "$HOME/.docker" -R

از سیستم خارج شوید و دوباره وارد شوید تا این مورد اعمال شود.

اگر باز هم مشکل را برطرف شد، ممکن است لازم باشد دایرکتوری ~/.docker/ خود را حذف کنید. این دایرکتوری به طور خودکار، دوباره ایجاد می شود، اما در صورت وجود، تمام تنظیمات سفارشی خود را از دست خواهید داد.

مهدی منصوری

من مهدی منصوری و کارشناس حوزه نرم افزار و امنیت اطلاعات هستم. کارشناسی ارشد خودم را در رشته امنیت اطلاعات از دانشگاه مالک اشتر تهران گرفتم. هم اکنون در زمینه DevOPS مشغول هستم. و در زمان های ممکن در این سایت و چند سایت دیگه مطلب می گذارم

درباره نویسنده

مهدی منصوری

من مهدی منصوری و کارشناس حوزه نرم افزار و امنیت اطلاعات هستم. کارشناسی ارشد خودم را در رشته امنیت اطلاعات از دانشگاه مالک اشتر تهران گرفتم.
هم اکنون در زمینه DevOPS مشغول هستم. و در زمان های ممکن در این سایت و چند سایت دیگه مطلب می گذارم

افزودن نظر

برای ارسال نظرات خود اینجا را کلیک کنید