راهنمای حل خطای Cannot connect to the Docker daemon در داکر

آیا تا به حال پیش آمده که بخواهید داکر را اجرا کنید و ناگهان با خطای “Cannot connect to the Docker daemon” مواجه شوید؟ این یکی از ناامیدکنندهترین مشکلاتی است که میتواند قبل از شروع کار، شما را متوقف کند. داکر دیمون (Docker Daemon) یک سرویس پسزمینه است که همه چیز، از شروع و توقف کانتینرها گرفته تا مدیریت ایمیجها و پردازش دستوراتی مثل docker run و docker ps را بر عهده دارد. اگر ترمینال شما نتواند به آن دسترسی پیدا کند، هیچ چیز کار نخواهد کرد.
در این راهنما، دلایل بروز این خطا را بررسی کرده و راهکارهای عملی برای رفع آن را به شما آموزش میدهیم.
داکر دیمون (Docker Daemon) دقیقاً چه کار میکند؟
داکر دیمون (dockerd) سرویس پسزمینهای است که مدیریت کانتینرها، ایمیجها، شبکه و ذخیرهسازی را انجام میدهد. وقتی دستوری را در داکر اجرا میکنید، CLI (رابط خط فرمان) خودش آن کار را انجام نمیدهد؛ بلکه درخواستی را به دیمون میفرستد. در سیستمهای لینوکسی، این ارتباط از طریق یک Unix Socket در مسیر /var/run/docker.sock انجام میشود. در داکر دسکتاپ یا محیطهای WSL، این ارتباط از طریق لولههای نامگذاری شده (Named Pipes) یا سوکتهای مدیریت شده توسط ماشین مجازی صورت میگیرد.
اگر CLI نتواند با دیمون ارتباط برقرار کند، با خطاهایی مثل این مواجه میشوید:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
۱. بررسی دسترسیهای کاربر (User Permissions)
در لینوکس، سوکت داکر متعلق به کاربر root است. برای اینکه بدون استفاده از sudo به داکر دسترسی داشته باشید، باید عضو گروه docker باشید.
برای بررسی مجوزهای سوکت، دستور زیر را اجرا کنید:
ls -l /var/run/docker.sock
اگر حساب کاربری شما عضو این گروه نباشد، دسترسی رد میشود. برای اضافه کردن کاربر خود به گروه داکر، از این دستور استفاده کنید:
sudo usermod -aG docker $USER
نکته: اگر گروه داکر وجود ندارد، ابتدا آن را با دستور
sudo groupadd dockerبسازید.
۲. بررسی وضعیت سرویس داکر
اگر داکر دیمون متوقف شده باشد، چیزی برای اتصال وجود نخواهد داشت. با دستور زیر وضعیت سرویس را چک کنید:
systemctl status docker
اگر وضعیت inactive (dead) یا failed بود، یعنی داکر اجرا نشده است. برای شروع دستی داکر:
sudo systemctl start docker
و برای اینکه داکر با هر بار بوت شدن سیستم خودکار اجرا شود:
sudo systemctl enable docker
۳. اجرای دستی داکر دیمون (dockerd)
در سرورهای مینیمال که داکر توسط systemd مدیریت نمیشود، میتوانید دیمون را به صورت دستی اجرا کنید تا علت خطا را متوجه شوید:
sudo dockerd
خروجی را به دقت بررسی کنید؛ اگر مشکلی در درایور ذخیرهسازی یا شبکه وجود داشته باشد، داکر در اینجا پیغام خطای مشخصی نمایش میدهد.
۴. بررسی و اصلاح سوکت یونیکس (Unix Socket)
داکر برای ارتباط به فایل /var/run/docker.sock نیاز دارد. اگر این فایل وجود نداشته باشد، یعنی دیمون اجرا نشده یا در حین اجرا با خطا مواجه شده است. بررسی وجود سوکت:
ls /var/run/docker.sock
اگر فایل موجود نبود، داکر را ریستارت کنید تا دوباره ساخته شود:
sudo systemctl restart docker
اگر فایل وجود داشت اما مجوزها اشتباه بود، با این دستورات آنها را اصلاح کنید:
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock
۵. بررسی Contextها و متغیرهای محیطی داکر
گاهی اوقات داکر سعی میکند به یک آدرس اشتباه (مثل یک سرور ریموت) متصل شود. بررسی کنید آیا متغیر DOCKER_HOST تنظیم شده است یا خیر:
env | grep DOCKER
اگر آدرسی مثل tcp://localhost:2375 دیدید، آن را پاک کنید:
unset DOCKER_HOST
همچنین با دستور زیر، Context فعال را بررسی کنید:
docker context ls
علامت ستاره (*) باید روی گزینه default باشد. اگر روی گزینه دیگری بود، با این دستور به حالت پیشفرض برگردید:
docker context use default
نکات تکمیلی برای پلتفرمهای مختلف
- Docker Desktop (ویندوز و مک): دیمون داخل یک ماشین مجازی کوچک اجرا میشود. اگر متصل نمیشود، کافیست برنامه Docker Desktop را ریستارت کنید.
- WSL: مطمئن شوید WSL در حال اجراست:
wsl --list --running. گاهی اوقات ریستارت کردن توزیع لینوکس در WSL مشکل را حل میکند.
خطای اتصال به دیمون معمولاً با شروع مجدد سرویس یا اصلاح دسترسیهای کاربر حل میشود. همیشه مطمئن شوید که کاربر شما عضو گروه داکر است و متغیرهای محیطی اشتباه، ارتباط شما را به جای دیگری هدایت نمیکنند.
بیشتر بخوانید:
داکر در مقابل ماشین مجازی: از کدام استفاده کنیم؟ چه تفاوتی دارند؟
ضروریترین دستورات داکر (Docker) که هر کاربری باید بداند
اجرای داکر در ویندوز بدون دردسر – روش WSL 2 برای توسعه سریع










