কখনো Docker চালানোর চেষ্টা করেছেন এবং হঠাৎ “Cannot connect to the Docker daemon” ত্রুটি পেয়েছেন? এটি সবচেয়ে ফ্রাস্ট্রেটিং সমস্যার একটি যা আপনাকে শুরু করার আগেই থামিয়ে দিতে পারে। Docker ডেমন পটভূমিতে নীরবে চলে, যা কন্টেইনার শুরু ও বন্ধ করার থেকে ইমেজ ম্যানেজ করা, লেয়ার বিল্ড করা, এবং আপনার সকল Docker কমান্ড যেমন docker run, docker ps ইত্যাদি প্রসেস করে। আপনার টার্মিনাল যদি এটিতে পৌঁছাতে না পারে, তবে কিছুই কাজ করবে না।
এই গাইডে, আমি ব্যাখ্যা করব কেন এই ত্রুটি হয় এবং Docker আবার স্মূথলি চালানোর জন্য কিছু সহজ, প্র্যাকটিক্যাল সমাধান দেখাব।
Docker Daemon কী করে তা বুঝুন
Docker ডেমন (dockerd) একটি ব্যাকগ্রাউন্ড সার্ভিস যা কন্টেইনার, ইমেজ, নেটওয়ার্কিং, এবং স্টোরেজ ম্যানেজ করার জন্য দায়ী। আপনি যখন Docker কমান্ড চালানেন, CLI নিজে এই কাজগুলো করে না; বরং এটি ডেমনের কাছে রিকোয়েস্ট পাঠায়। Linux সিস্টেমে, এই যোগাযোগ একটি Unix সকেটের মাধ্যমে ঘটে যা অবস্থিত “/var/run/docker.sock”-এ। Docker Desktop বা WSL এনভায়রনমেন্টে, CLI ডেমনের সাথে একটি নেমড পাইপ বা ভার্চুয়াল মেশিন দ্বারা ম্যানেজড একটি সকেটের মাধ্যমে যোগাযোগ করে।
যদি CLI ডেমনের সাথে যোগাযোগ করতে না পারে, তবে আপনি “Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?” এর মতো ত্রুটি পাবেন।
এটি সাধারণত এই কারণগুলোর একটি জন্য ঘটে:
- Docker সার্ভিস চলছে না।
- আপনার ইউজারের Docker সকেট এক্সেস করার পারমিশন নেই।
- Docker ভুল কনটেক্সট ব্যবহার করছে।
- Docker সকেট অনুপস্থিত বা ভুল পারমিশন রয়েছে।
DOCKER_HOSTএর মতো এনভায়রনমেন্ট ভেরিয়েবল মিসকনফিগার করা আছে।- প্ল্যাটফর্ম-নির্দিষ্ট সমস্যা (Docker Desktop, WSL, বা রিমোট ডেমন)।
এই যোগাযোগ চেইনের কোন অংশ ভাঙা সেটি শনাক্ত করা সঠিকভাবে সমস্যা সমাধানের চাবি।
আপনার ইউজার পারমিশন চেক করুন
Linux সিস্টেমে, Docker একটি Unix সকেটের মাধ্যমে যোগাযোগ করে যা root ইউজারের অধীন। ইউজাররা Docker গ্রুপের সদস্য হতে হবে যাতে sudo ছাড়াই সেটি এক্সেস করতে পারে।
সকেট পারমিশন ভেরিফাই করতে নিচের কমান্ড চালান:
ls -l /var/run/docker.sock
এই আউটপুট বলে যে সকেটটি root-এর অধীন, এবং শুধু docker গ্রুপের সদস্যরা এটিকে রিড বা রাইট করতে পারবে। আপনার ইউজার অ্যাকাউন্ট যদি এই গ্রুপে না থাকে, Docker এক্সেস অস্বীকার করবে এবং কমান্ড এক্সিকিউট করতে ব্যর্থ হবে। এটি ফিক্স করতে, আপনার ইউজারকে Docker গ্রুপে যোগ করুন:
sudo usermod -aG docker $USER
যদি Docker গ্রুপ অস্তিত্বে না থাকে, তবে নিচের কমান্ড দিয়ে তৈরি করতে পারেন:
sudo groupadd docker
Docker সার্ভিস চলছে কিনা ভেরিফাই করুন
একটি খুব সহজ কিন্তু গুরুত্বপূর্ণ সমস্যা হলো Docker হয়তো চলছে না। যদি Docker ডেমন বন্ধ থাকে, Docker CLI-র কানেক্ট করার জন্য কিছুই থাকে না, যার ফলে উল্লিখিত ত্রুটি হয়। Docker সার্ভিসের বর্তমান স্ট্যাটাস চেক করতে নিচের কমান্ড চালান:
systemctl status docker
আমাদের কেসে, Docker এক্টিভ এবং সফলভাবে চলছে। যাইহোক, আউটপुट যদি inactive (dead) বা failed এর মতো স্টেট দেখায়, তবে Docker সার্ভিস চলছে না।
Docker ম্যানুয়ালি শুরু করতে আপনি এই কমান্ড চালাতে পারেন:
sudo systemctl start docker
আপনি যদি চান Docker সিস্টেম বুট হওয়ার সাথে সাথে অটোমেটিক্যালি শুরু হয়, তবে এটি এনেবল করুন:
sudo systemctl enable docker
Docker Daemon ম্যানুয়ালি শুরু করুন (dockerd)
মিনিমাল সার্ভার বা কাস্টম Linux সেটআপে, Docker হয়তো systemd দ্বারা ম্যানেজড নাও হতে পারে। এই এনভায়রনমেন্টে, Docker ডেমন অটোমেটিক্যালি শুরু হতে পারে না, এমনকি Docker ইনস্টল করা থাকলেও। ডেমন শুরু হতে পারে কিনা টেস্ট করতে, ম্যানুয়ালি চালানোর চেষ্টা করুন:
sudo dockerd
আউটপুটmerksamভাবে মনিটর করুন। যদি কিছু ভুল হয়, Docker সাধারণত একটি স্পষ্ট ত্রুটি বার্তা প্রিন্ট করে যা সমস্যাটি ব্যাখ্যা করে, যেমন স্টোরেজ ড্রাইভার সমস্যা, পারমিশন এরর, বা নেটওয়ার্ক কনফ্লিক্ট।
Docker Unix Socket inspeCCt এবং ফিক্স করুন
Docker CLI Docker ডেমনের সাথে একটি Unix সকেট ব্যবহার করে ইন্টারঅ্যাক্ট করে। যদি এই সকেট অনুপস্থিত, করাপ্ট, বা ভুল পারমিশন থাকে, Docker কানেক্ট করতে পারে না। সকেট আছে কিনা চেক করতে নিচের কমান্ড ব্যবহার করুন:
ls /var/run/docker.sock
যদি ফাইলটি অনুপস্থিত থাকে, সাধারণত এর মানে হলো Docker ডেমন চলছে না, বা Docker স্টার্টআপের সময় সকেট তৈরি করতে ব্যর্থ হয়েছে। সেক্ষেত্রে, Docker রিস্টার্ট করে সেটি পুনরায় তৈরি করতে হবে:
sudo systemctl restart docker
যদি সকেটটি আছে কিন্তু ভুল পারমিশন থাকে, নিচের কমান্ডগুলো দিয়ে ফিক্স করুন:
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock
Docker Contexts এবং Environment Variables ভেরিফাই করুন
কभी কখন Docker ডেমনের সাথে কানেক্ট করতে পারে না কারণ এটি ভুল এন্ডপয়েন্টে পয়েন্ট করছে। এটি হতে পারে যদি আপনার DOCKER_HOST এনভায়রনমেন্ট ভেরিয়েবল ভুলভাবে সেট থাকে বা আপনার এক্টিভ Docker কনটেক্সট একটি রিমোট বা অনুপলব্ধ এনভায়রনমেন্টে পয়েন্ট করে।
Environment Variables চেক করুন
নিচের কমান্ড চালিয়ে দেখুন কোনো Docker-সম্পর্কিত এনভায়রনমেন্ট ভেরিয়েবল সেট আছে কিনা:
env | grep DOCKER
যদি আপনি DOCKER_HOST=tcp://localhost:2375 এর মতো কিছু দেখেন, এর মানে Docker একটি রিমোট ডেমনের দিকে পয়েন্ট করছে যা নিষ্ক্রিয় বা অনুপস্থিত হতে পারে। আপনি ভেরিয়েবলটি আনসেট করে অস্থায়ীভাবে ফিক্স করতে পারেন:
unset DOCKER_HOST
পেরমানেন্টলি রিমুভ করতে, শেল কনফিগারেশন ফাইল যেমন “~/.bashrc”, “~/.zshrc”, এবং “/etc/environment” থেকে এটি ক্লিন করুন।
Active Docker Context চেক করুন
Docker contexts নির্ধারণ করে CLI কোন ডেমনের সাথে যোগাযোগ করবে। আপনি উপলব্ধ কনটেক্সট লিস্ট করতে পারেন এবং এক্টিভটি দেখতে পারেন:
docker context ls
একটি এস্টারিস্ক (*) বর্তমান এক্টিভ কনটেক্সট নির্দেশ করে। যদি কনটেক্সট একটি অনুপলব্ধ এনভায়রনমেন্টে পয়েন্ট করে, ডিফল্ট লোকাল ডেমনে ফিরে যান:
docker context use default
প্ল্যাটফর্ম-নির্দিষ্ট সমস্যা
কিছু কানেকশন সমস্যা শুধু নির্দিষ্ট প্ল্যাটফর্মে হয়। উদাহরণস্বরূপ, Windows বা macOS-এ Docker Desktop ডেমন একটি লাইটওয়েট VM-এ চালায়। যদি VM শুরু হতে ব্যর্থ হয়, Docker CLI কানেক্ট করতে পারবে না। এটি ফিক্স করতে Docker Desktop রিস্টার্ট করুন।
একইভাবে, WSL-এ Docker ব্যবহার করার সময়, ডেমন একটি Linux এনভায়রনমেন্টে চলে। নিশ্চিত করুন যে WSL সঠিকভাবে ইনস্টল এবং চলছে:
wsl --list --running
যদি WSL-এ থেকে Docker ডেমন অ্যাক্সেসযোগ্য না হয়, Docker Desktop সার্ভিস বা নির্দিষ্ট WSL ডিস্ট্রিবিউশন রিস্টার্ট করলেই সমস্যা সমাধান হয় প্রায়শই।
ভবিষ্যতে এই ত্রুটি এড়াতে টিপস
ভবিষ্যতে “cannot connect to Docker daemon” ত্রুটি এড়াতে, সর্বদা নিশ্চিত করুন Docker সার্ভিস চলছে, বিশেষ করে সিস্টেম আপডেটের পরে, এবং আপনার ইউজারকে Docker গ্রুপে যোগ করুন sudo এড়াতে। নিয়মিত আপনার এক্টিভ Docker কনটেক্সট চেক করুন, বিশেষ করে মেশিন, WSL ডিস্ট্রিবিউশন, বা Docker Desktop স্যুইচ করার পরে, এবং DOCKER_HOST সেট করা এড়ান যদি না কোনো নির্দিষ্ট রিমোট ডেমনের সাথে কানেক্ট করতে হয়, কারণ মিসকনফিগারড ভেরিয়েবল CLI কমান্ডকে মিসলিড করতে পারে। অতিরিক্তভাবে, journalctl -u docker.service ব্যবহার করে ডেমন লগ মনিটর করুন সমস্যা আগেই ধরতে।