حتماً تا به حال این موقعیت برای شما هم پیش آمده است که Docker را روی اوبونتو نصب کنید؛ اما، زمانی‌که بخواهید یک دستور docker را اجرا نمایید، با خطای زیر روبه‌رو شوید:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json: dial unix /var/run/docker.sock: connect: permission denied
 

در این موقعیت لازم نیست که کد خاصی را اجرا نمایید تا با این خطا روبه‌رو شوید؛ بلکه، این امر برای دستورات پایه docker؛ مانند ps نیز اتفاق می‌افتد.

 

این مطلب نیز ممکن است برای شما مفید باشد: نحوه اتصال به Docker Container

 

در اینجا می‌خواهیم، به شما نحوه رفع این خطای آزار دهنده را آموزش دهیم.

 

رفع خطای “Got permission denied” هنگام اتصال به سوکت Docker daemon برای Docker در اوبونتو

دو روش برای مقابله با خطای شرح داده شده وجود دارد.

 

روش اول: اجرای تمام دستورات docker با sudo

اگر به سیستم خود دسترسی sudo دارید، یکی از روش‌ها این است که هر دستور docker را با sudo اجرا کنید. در این صورت، دیگر با خطای “Got permission denied while trying to connect to the Docker daemon socket” روبه‌رو نخواهید شد.

sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES
13dc0f4226dc        ubuntu              "bash"              17 hours ago        Exited (0) 16 hours ago                       container-2
2d9a8c190e6c        ubuntu              "/bin/bash"         17 hours ago        Created                                       container-1

روش اول، بدلیل نیاز به اجرای هر دستور docker با sudo، روش غیر کارآمدی است؛ چراکه، در صورت فراموش کردن افزودن sudo به ابتدای دستور، دوباره خطای “permission denied” را دریافت خواهید کرد.

 

روش دوم: اجرای دستورات docker بدون sudo

برای اجرای دستورات docker بدون sudo، می‌توانید حساب کاربری خود (یا حسابی را که برای رفع این مشکل استفاده می‌کنید) را به گروه docker اضافه نمایید.

بدین منظور، ابتدا گروه docker را با استفاده از دستور groupadd ایجاد کنید. این گروه ممکن است قبلاً وجود داشته باشد؛ اما، اجرای دستور ایجاد گروه ضرری ندارد.

sudo groupadd docker

اکنون که گروه docker را دارید، با استفاده از دستور usermod، کاربر خود را به این گروه اضافه نمایید. فرض می‌کنیم که شما در حال تلاش برای انجام این کار برای حساب کاربری خود هستید، در این مورد می‌توانید، از متغیر USER استفاده کنید.

sudo usermod -aG docker $USER

 

این مطلب نیز ممکن است برای شما مفید باشد: نحوه نمایش containerها درDocker

 

اکنون با نمایش کاربران گروه، مطمئن شوید که کاربر خود را به گروه docker اضافه کرده‌اید. بدین منظور، احتمالاً مجبور هستید از سیستم خارج شده و دوباره وارد سیستم شوید.

abhishek@itsfoss:~$ groups
abhishek adm cdrom sudo dip plugdev lpadmin sambashare docker

اگر گروه‌های خود و گروه‌های docker را بررسی کنید، ممکن است متوجه شوید؛ حتی پس از خروج از سیستم، این حساب کاربری لیست نشده است. در این صورت، مجبور خواهید بود، مجدداً اوبونتو را راه‌اندازی کنید. برای جلوگیری از این امر، می‌توانید از دستور newgrp استفاده نمایید:

newgrp docker

اکنون، اگر دستورات docker را بدون sudo اجرا می‌کنید، باید دستورات به درستی اجرا شوند.

 

عیب یابی بیشتر

در مواردی، اگر در گذشته دستورات docker را با sudo اجرا کرده باشید، ممکن است لازم باشد که به برخی از فایل‌ها مجوزهای اضافی اضافه کنید.

بدین منظور می‌توانید، مالکیت گروه فایل var/run/docker.sock/ را تغییر دهید.

sudo chown root:docker /var/run/docker.sock

همچنین می‌توانید، مالکیت گروه دایرکتوری docker./~ را تغییر دهید.

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

و سپس docker را با sudo اجرا نمایید. در این صورت نیز با خطایی روبه‌رو نخواهید شد.

 

 

منبع:

linuxhandbook