حتماً تا به حال این موقعیت برای شما هم پیش آمده است که 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 اجرا نمایید. در این صورت نیز با خطایی روبهرو نخواهید شد.
منبع:
0 دیدگاه
نوشتن دیدگاه