Ubuntu-তে Docker Desktop চালু হচ্ছে না? কারণ ও সমাধান
Ubuntu-তে Docker Desktop আটকে থাকে, ড্যাশবোর্ড খোলে না, বা unit not found দেখায়? KVM, kvm গ্রুপ, user unit, ট্রে আইকন আর context ধাপে ধাপে মিলিয়ে আসল কারণ খুঁজে বের করুন।
Ubuntu-তে Docker Desktop চালু হচ্ছে না কেন: একটি কারণেই সব ব্যাখ্যা
Ubuntu-তে Docker Desktop চালু না হওয়ার পেছনে প্রায় সবসময় একটি তথ্য থাকে: Docker Desktop for Linux নিজের একটি ভার্চুয়াল মেশিন (VM) চালায়। Docker-এর ইনস্টল পেজে এটা সরাসরি লেখা আছে: "Docker Desktop for Linux runs a Virtual Machine (VM)."। তাই ওই VM চালু না হলে Desktop-ও চালু হয় না। তখন ড্যাশবোর্ড খোলে না, আর অ্যাপ "Starting" অবস্থায় আটকে থাকে।
এই লেখাটি তাঁদের জন্য, যাঁরা ঢাকা বা চট্টগ্রামে বসে Ubuntu ল্যাপটপে কাজ করেন, বা Windows-এ VMware-এর ভেতরে Ubuntu চালান। Docker Desktop ইনস্টলের পর সাধারণত তিনটি সমস্যার একটি দেখা দেয়। অ্যাপ কখনও পুরোপুরি চালু হয় না। ড্যাশবোর্ড খোলে না। অথবা টার্মিনালে Unit docker-desktop.service not found আসে। নিচের ধাপগুলো ক্রম অনুযায়ী চালান। প্রতিটি ধাপ একটি করে নির্দিষ্ট কারণ বাদ দেয়।
Docker Desktop চালানোর শর্তগুলো কী কী?
Desktop একটি VM চালায়, তাই এর চাহিদাও একটি VM চালানোর মতোই। ২৪ অক্টোবর ২০২৬ তারিখে docs.docker.com-এ পড়া তালিকা অনুযায়ী দরকার:
- 64-bit কার্নেল, আর virtualization সাপোর্ট করে এমন CPU
- KVM (Kernel-based Virtual Machine, লিনাক্স কার্নেলের নিজস্ব virtualization ব্যবস্থা) সাপোর্ট
- QEMU 5.2 বা তার পরের সংস্করণ
- systemd init সিস্টেম
- GNOME, KDE বা MATE ডেস্কটপ (অন্য ডেস্কটপে চলতে পারে, তবে সেগুলো তালিকায় নেই)
- কমপক্ষে 4 GB RAM
Ubuntu-র আলাদা ইনস্টল পেজে আরও একটি শর্ত আছে: "Have an x86-64 system with Ubuntu 26.04 LTS or 24.04 LTS."। মানে Ubuntu 22.04 বা ARM মেশিন এই পেজের তালিকায় নেই। তাই আগে আপনার সংস্করণ আর আর্কিটেকচার দেখে নিন:
grep VERSION= /etc/os-release
uname -m
free -h
echo $XDG_CURRENT_DESKTOPuname -m যদি x86_64 না দেখায়, বা সংস্করণ 24.04 বা 26.04 না হয়, তাহলে আসল সমস্যা এটাই। নিচের ধাপগুলো তখন কাজে আসবে না। echo $XDG_CURRENT_DESKTOP দেখায় আপনি কোন ডেস্কটপে আছেন।
ধাপ ১: KVM আছে কি, আর আপনার ইউজার কি /dev/kvm খুলতে পারে?
Docker-এর ডকস বলে, হোস্টে virtualization সাপোর্ট থাকলে kvm মডিউল নিজে থেকেই লোড হওয়ার কথা। প্রথমে দেখুন মডিউলটি লোড হয়েছে কি না:
lsmod | grep kvmতালিকায় কিছু না এলে মডিউলটি নিজে লোড করুন। Intel প্রসেসরে লাগে kvm_intel, AMD প্রসেসরে kvm_amd:
sudo modprobe kvm
sudo modprobe kvm_intel
sudo modprobe kvm_amdআপনার CPU যে কোম্পানির, শুধু সেটার লাইনটি কাজ করবে। অন্য লাইনটি ব্যর্থ হওয়া স্বাভাবিক। দুটোই ব্যর্থ হলে Docker-এর ডকস kvm-ok চালাতে বলে। Ubuntu-তে এটি cpu-checker প্যাকেজের সঙ্গে আসে:
sudo apt install -y cpu-checker
kvm-okkvm-ok জানায় এই মেশিন হার্ডওয়্যার-অ্যাক্সিলারেটেড KVM VM চালাতে পারবে কি না। অনেক ল্যাপটপে BIOS বা UEFI সেটিংসে virtualization বন্ধ থাকে। তখন CPU সক্ষম হলেও কার্নেল KVM ব্যবহার করতে পারে না, কারণ ফার্মওয়্যার ফিচারটি বন্ধ রেখেছে। সেটিংসে Intel VT-x বা AMD-V (অনেক বোর্ডে নাম SVM) খুঁজে চালু করুন।
মডিউল লোড থাকলেও আপনার ইউজারের /dev/kvm ফাইলটি খোলার অনুমতি লাগবে। মালিকানা দেখুন, তারপর নিজেকে kvm গ্রুপে যোগ করুন:
ls -al /dev/kvm
sudo usermod -aG kvm $USERএরপর সাইন আউট করে আবার সাইন ইন করুন। Docker-এর ডকসেও এই ধাপটি আছে। কারণটা এরকম: usermod শুধু গ্রুপের ডেটাবেস বদলায়। আপনার চলমান সেশন লগইনের সময় যে গ্রুপ তালিকা পেয়েছিল, সেটাই ব্যবহার করতে থাকে। আবার লগইন করে যাচাই করুন:
groupsতালিকায় kvm না থাকলে Desktop-এর VM ডিভাইসটি খুলতে পারবে না। সেক্ষেত্রে দেখুন ঠিকমতো লগআউট হয়েছিল কি না। শুধু টার্মিনাল বন্ধ করে আবার খুললে হবে না।
VMware বা VirtualBox-এর ভেতরের Ubuntu-তে Docker Desktop চলবে কি?
Windows-এ VMware-এর ভেতরে Ubuntu চালালে Docker Desktop-এর VM হয়ে যায় একটি VM-এর ভেতরে আরেকটি VM। একে nested virtualization বলে। এ বিষয়ে Docker-এর অবস্থান পরিষ্কার: "Docker does not provide support for running Docker Desktop for Linux in nested virtualization scenarios."। তাদের পরামর্শ হলো Desktop নেটিভভাবে চালানো, অর্থাৎ হার্ডওয়্যারে সরাসরি ইনস্টল করা একটি সমর্থিত ডিস্ট্রোতে।
তবু চাইলে হাইপারভাইজারে nested virtualization চালু করে চেষ্টা করতে পারেন। তাহলে ভেতরের Ubuntu-তে /dev/kvm দেখা দেয়, আর ধাপ ১ পার হওয়া যায়। মনে রাখবেন, এটা আপনার নিজের বেছে নেওয়া পথ। এখানে কিছু ভাঙলে Docker সাপোর্ট দেবে না। হাইপারভাইজার Proxmox হলে Proxmox-এ nested virtualization চালু করার ধাপগুলো আলাদা লেখায় দেওয়া আছে। ক্লাউড সার্ভারে এটা কেন সব জায়গায় পাওয়া যায় না, তা VPS-এ nested virtualization কীভাবে কাজ করে লেখায় ব্যাখ্যা করা আছে।
VM-এর ভেতরে শুধু কন্টেইনার চালানোই যদি লক্ষ্য হয়, তাহলে Docker Engine অনেক সহজ পথ। Engine নিজের কোনো VM চালায় না, তাই সেখানে nested virtualization-এর প্রশ্নই ওঠে না। শেষের অংশে এ নিয়ে আরও বলা আছে।
ধাপ ২: "Unit docker-desktop.service not found" কেন দেখায়?
Ubuntu-র ইনস্টল পেজে Docker Desktop চালু করার দুটি উপায় দেওয়া আছে: অ্যাপ্লিকেশন মেনু থেকে, অথবা টার্মিনাল থেকে এই কমান্ডে:
systemctl --user start docker-desktopলগইনের সঙ্গে সঙ্গে চালু করতে চাইলে:
systemctl --user enable docker-desktopদুটি কমান্ডেই --user আছে, আর কোনোটিতেই sudo নেই। --user ছাড়া systemctl পুরো সিস্টেমের সার্ভিস ম্যানেজারকে প্রশ্ন করে। --user দিলে প্রশ্ন যায় আপনার নিজের ইউজার-লেভেলের সার্ভিস ম্যানেজারের কাছে। এ দুটি আলাদা ম্যানেজার, আর প্রত্যেকে নিজের ইউনিট তালিকা রাখে। Docker-এর ডকস শুধু --user রূপটিই দেয়। তাই sudo systemctl start docker-desktop চালানো ডকসের নির্দেশনার বাইরে।
তবে অসম্পূর্ণ ইনস্টলের পরেও এই ত্রুটি আসতে পারে। তাই অনুমান না করে এই কমান্ডগুলো চালিয়ে নিজে দেখুন:
systemctl --user status docker-desktop
systemctl --user list-unit-files | grep docker
dpkg -s docker-desktop | grep Status--user দিয়েও ইউনিট না পাওয়া গেলে আগে নিশ্চিত হন প্যাকেজটি আদৌ ইনস্টল হয়েছে কি না। dpkg -s যদি জানায় প্যাকেজ ইনস্টল নেই, তাহলে ডাউনলোড করা .deb ফাইলটি আবার ইনস্টল করুন। ডকসের কমান্ড হলো sudo apt install ./docker-desktop-amd64.deb। ইনস্টলের শেষে apt একটি বার্তা দেখাতে পারে, যার শুরু N: Download is performed unsandboxed as root দিয়ে। Docker-এর ডকস অনুযায়ী এটি নিরীহ, তাই এড়িয়ে যেতে পারেন।
ধাপ ৩: GNOME-এ ট্রে আইকন নেই, তার মানে কি অ্যাপ বন্ধ?
Docker-এর লিনাক্স পেজ বলে, অনেক লিনাক্স ডিস্ট্রোতে GNOME নিজে থেকে ট্রে আইকন দেখায় না। তাই Ubuntu পেজে শর্ত রাখা হয়েছে: GNOME-এ AppIndicator আর KStatusNotifierItem এক্সটেনশন ইনস্টল থাকতে হবে। কোন কোন এক্সটেনশন চালু আছে, দেখুন:
gnome-extensions list --enabledতালিকায় appindicator নামের কিছু না থাকলে Ubuntu 24.04-এ এই প্যাকেজটি দুটোই দেয়। এর বর্ণনা হলো "AppIndicator, KStatusNotifierItem and tray support for GNOME Shell":
sudo apt install -y gnome-shell-extension-appindicatorইনস্টলের পর সাইন আউট করে আবার ঢুকুন, তারপর Extensions অ্যাপ থেকে এটি চালু করুন। আপনি KDE বা MATE ব্যবহার করলে ডকস অন্য একটি জিনিস চায়, সেটি হলো gnome-terminal:
sudo apt install -y gnome-terminalএকটি পরামর্শ দিই: আইকন না দেখলেই ধরে নেবেন না যে অ্যাপ বন্ধ হয়ে গেছে। আইকন দেখানো ডেস্কটপের কাজ। Desktop-এর VM চলছে কি না, সেটা আলাদা প্রশ্ন। অ্যাপ আসলে চলছে কি না, পরের ধাপের docker desktop status দিয়ে দেখুন। আবার চালু করার আগে এটা দেখে নিন। নইলে একটি চলমান Desktop-এর পাশে আরেকটি চালু করার চেষ্টা হবে।
ধাপ ৪: GUI না খুললে docker desktop status, logs আর restart কী বলে?
ড্যাশবোর্ড না খুললেও টার্মিনাল থেকে Desktop নিয়ন্ত্রণ করা যায়। Docker-এর CLI রেফারেন্সে docker desktop কমান্ডের অধীনে status, logs, restart, start, stop আর diagnose আছে। প্রথমে অবস্থা দেখুন:
docker desktop status
docker desktop status --format json--format দুটি মান নেয়: pretty (ডিফল্ট) আর json। এরপর লগ পড়ুন। --priority 2 দিলে শুধু error দেখায়। 1 দিলে warning আর তার চেয়ে গুরুতর বার্তা দেখায়:
docker desktop logs --priority 2
docker desktop logs --priority 1যে লাইনটি বারবার আসছে, সেটাই আপনার সূত্র। KVM বা অনুমতি নিয়ে কোনো বার্তা পেলে ধাপ ১-এ ফিরে যান। তারপর রিস্টার্ট করুন:
docker desktop restartরিস্টার্টেও কাজ না হলে ডায়াগনস্টিকস চালান। ড্যাশবোর্ড চালু না হলে ডকস নিজেই এই পথ দেখায়:
docker desktop diagnoseলিনাক্সে ডায়াগনস্টিক প্রোগ্রামটি থাকে /opt/docker-desktop/bin/com.docker.diagnose পাথে। /opt/docker-desktop/bin/com.docker.diagnose gather -upload চালালে রিপোর্ট আপলোড হয়, আর আপনি একটি diagnostics ID পান। Docker-এর সাপোর্টে বা ফোরামে প্রশ্ন করার সময় এই ID দিন। ডকসের সতর্কতা অনুযায়ী এতে কয়েক মিনিট লাগতে পারে, তাই কাজ শেষ হওয়ার আগে টার্মিনাল বন্ধ করবেন না। আপনার Desktop খুব পুরনো হলে docker desktop কমান্ড নাও চিনতে পারে। তখন আগে Desktop হালনাগাদ করুন।
Ubuntu 24.04-এ AppArmor: পুরনো সমাধান কেন এখানে নেই
ফোরামে Ubuntu 24.04-এ AppArmor denial নিয়ে অনেক পোস্ট পাবেন। এর একটি নথিভুক্ত সমাধান একসময় ছিল, তবে সেটা পুরনো সংস্করণের জন্য। Docker Desktop 4.30.0 (৬ মে ২০২৪) আর 4.31.0-এর রিলিজ নোটে এটি Known Issue হিসেবে ছিল: "Ubuntu 24.04 LTS is not yet supported, Docker Desktop will fail to start."। তখনকার workaround ছিল একটি sysctl। সেটা unprivileged user namespace-এর ওপর Ubuntu-র বিধিনিষেধ পুরো সিস্টেমের জন্য তুলে দিত। পরে 4.35.0-এর (২৪ অক্টোবর ২০২৪) রিলিজ নোটে লেখা হয়: "Ubuntu 24.04 is now supported on Docker Desktop."।
আজকের ইনস্টল পেজ, Ubuntu পেজ, Linux FAQ বা ট্রাবলশুটিং পেজের কোথাও AppArmor-এর উল্লেখ নেই। তাই এখানে সেই sysctl শেখানো হচ্ছে না। এটা শুধু Docker-এর জন্য নয়, মেশিনের সব প্রোগ্রামের জন্য একটি সুরক্ষা দুর্বল করে দেয়। তার বদলে দেখুন কার্নেল আসলে কী আটকাচ্ছে:
sudo journalctl -k | grep -i apparmorapparmor="DENIED" লেখা লাইনে দেখতে পাবেন কোন প্রোফাইল কোন কাজ আটকেছে। আগে Desktop সর্বশেষ সংস্করণে হালনাগাদ করুন। তারপর docker desktop diagnose চালিয়ে ID-সহ সমস্যাটি রিপোর্ট করুন। ফোরামের "সব নিরাপত্তা বন্ধ করে দিন" ধরনের পরামর্শ এড়িয়ে চলুন।
"আমার সব image হারিয়ে গেছে": context বুঝে নিন
Docker Desktop আর Docker Engine একই মেশিনে পাশাপাশি ইনস্টল থাকতে পারে। ডকস অনুযায়ী, চালু হওয়ার সময় Desktop নিজের context desktop-linux-কে current context বানায়। বন্ধ হওয়ার সময় current context আবার default-এ ফিরিয়ে দেয়। Context হলো docker কমান্ড কোন daemon-এর সঙ্গে কথা বলবে, তার ঠিকানা। default context লোকাল /var/run/docker.sock সকেট দিয়ে Engine-এর daemon-এর সঙ্গে কথা বলে।
তাই Desktop চালু থাকলে docker images চালিয়ে Engine-এর পুরনো image দেখা যায় না। ডকস বলে, Desktop ইনস্টলের আগে Engine-এ যা তৈরি হয়েছিল, তা Desktop-এ পাওয়া যায় না। কারণ এরা আলাদা জায়গায় ডেটা রাখে। Desktop সব কন্টেইনার আর image রাখে একটি বড় "disk image" ফাইলে। লিনাক্সের Docker সাধারণত /var/lib/docker ডিরেক্টরি ব্যবহার করে। আপনার image মুছে যায়নি। docker কমান্ড এখন শুধু অন্য একটি daemon-কে প্রশ্ন করছে। কোন context চালু আছে দেখুন, আর দরকার হলে বদলান:
docker context ls
docker context use default
docker context use desktop-linuxDesktop ব্যবহারের সময় Docker সাধারণত Engine বন্ধ রাখার পরামর্শ দেয়:
sudo systemctl stop docker docker.socket containerdদুটির মূল পার্থক্য আর লাইসেন্সের প্রশ্ন বুঝতে Docker Engine আর Docker Desktop: কোনটি ফ্রি, কোনটিতে লাইসেন্স লাগে পড়ুন।
রিসেট করবেন কীভাবে, আর ~/.docker কেন পুরোটা মুছবেন না
docker desktop CLI-তে কোনো reset সাবকমান্ড নেই। ২৪ অক্টোবর ২০২৬-এ পড়া রেফারেন্সে সাবকমান্ডগুলো হলো auth, diagnose, disable, enable, engine (শুধু Windows), kubernetes, logs, restart, start, status, stop, update আর version। নথিভুক্ত রিসেট আছে GUI-এর Troubleshoot মেনুতে। সেখানে দুটি অপশন পাবেন:
- Reset to factory defaults: Desktop-এর সব সেটিং শুরুর অবস্থায় ফিরিয়ে নেয়।
- Clean up data: disk image রিসেট করে। এতে সব লোকাল কন্টেইনার আর image মুছে যায়, তবে সেটিংস থেকে যায়।
ফোরামে প্রায়ই পুরো ~/.docker ফোল্ডার মুছে ফেলার পরামর্শ দেখা যায়। আমাদের পরামর্শ হলো এটা করবেন না। ওই ফোল্ডারের config.json-এ credsStore আর currentContext থাকে। Docker-এর ভাষায়, এই এন্ট্রিগুলো বলে দেয় "where to store credentials and which context is active"। পুরো ফোল্ডার মুছলে এই সেটিংসগুলোও চলে যাবে। ~/.docker/desktop মোছার ধাপটি Docker-এর ডকসে আছে ঠিকই, তবে আনইনস্টলের অংশ হিসেবে, আলাদা রিসেট হিসেবে নয়।
Docker Desktop পুরোপুরি আনইনস্টল করার নিয়ম
শুরুর আগে Docker-এর সতর্কতাটি জেনে নিন: আনইনস্টল করলে মেশিনের লোকাল কন্টেইনার, image, volume আর অন্যান্য Docker ডেটা মুছে যায়। দরকারি image থাকলে আগে docker save -o myimage.tar myimage:tag দিয়ে একটি ফাইলে রেখে দিন। Ubuntu-র জন্য Docker-এর ধাপগুলো হলো:
sudo apt remove docker-desktop
rm -r $HOME/.docker/desktop
sudo rm /usr/local/bin/com.docker.cli
sudo apt purge docker-desktopএরপর $HOME/.docker/config.json খুলে শুধু credsStore আর currentContext প্রপার্টি দুটি মুছুন। ফাইলের বাকি অংশ যেমন আছে রেখে দিন। এডিট করার আগে একটি কপি রাখা ভালো:
cp ~/.docker/config.json ~/.docker/config.json.bak
nano ~/.docker/config.jsoncurrentContext থেকে গেলে docker কমান্ড এমন একটি desktop-linux context খুঁজবে, যা আর নেই। তাই এই ধাপটি বাদ দেবেন না।
কিছুতেই না হলে: Docker Engine, আর VPS-এ কী করবেন
এই লেখার ধাপগুলো ২৪ অক্টোবর ২০২৬ তারিখে Docker-এর ডকস পড়ে লেখা। তখন সর্বশেষ সংস্করণ ছিল 4.96.3 (২২ অক্টোবর ২০২৬)। ধাপগুলো সেই সংস্করণের ডকসের সঙ্গে মেলানো হয়েছে, তবে প্রতিটি ল্যাপটপে চালিয়ে পরীক্ষা করা হয়নি। ২০২৬ সালের কিছু ফোরাম থ্রেডে এখনও কোনো নথিভুক্ত সমাধান নেই। সেসব ক্ষেত্রে docker desktop diagnose আর diagnostics ID-ই সবচেয়ে কাজের পথ।
আপনার দরকার যদি শুধু কন্টেইনার চালানো হয়, তাহলে সরাসরি Docker Engine ব্যবহার করুন। Engine-এর জন্য কোনো VM লাগে না, GUI-ও লাগে না। Engine-এর Ubuntu পেজে 26.10, 26.04, 24.04 আর 22.04 সমর্থিত। আর্কিটেকচারের তালিকায় x86_64-এর পাশাপাশি arm64-ও আছে। তাই VMware-এর ভেতরের Ubuntu-তে বা পুরনো ল্যাপটপে Engine সাধারণত ঝামেলাহীন চলে।
সার্ভারে প্রশ্নটা আরও সহজ। VPS-এ সাধারণত কোনো ডেস্কটপ পরিবেশ থাকে না, আর বেশিরভাগ VPS-এ nested KVM-ও থাকে না। অথচ Docker Desktop-এর দুটোই লাগে। তাই সার্ভারে VPS-এ Docker Engine ইনস্টল করে কন্টেইনার চালানোর গাইড অনুসরণ করুন।
FAQ
Ubuntu-তে Docker Desktop চালু হচ্ছে না, প্রথমে কী দেখব?
প্রথমে KVM দেখুন, কারণ Docker Desktop for Linux নিজের একটি VM চালায়। lsmod | grep kvm চালিয়ে দেখুন মডিউল লোড হয়েছে কি না। ls -al /dev/kvm দিয়ে দেখুন ডিভাইসটি আছে কি না। তারপর groups চালিয়ে নিশ্চিত হন আপনি kvm গ্রুপে আছেন। না থাকলে sudo usermod -aG kvm $USER চালান, তারপর সাইন আউট করে আবার ঢুকুন। এরপর docker desktop status আর docker desktop logs --priority 2 দেখুন।
"Unit docker-desktop.service not found" এলে কী করব?
Docker-এর ডকস Desktop চালু করতে শুধু systemctl --user start docker-desktop দেয়, যাতে sudo নেই। --user ছাড়া systemctl সিস্টেমের সার্ভিস ম্যানেজারকে প্রশ্ন করে, যেটা আপনার ইউজার ম্যানেজার থেকে আলাদা। systemctl --user status docker-desktop চালান। সেখানেও ইউনিট না পাওয়া গেলে dpkg -s docker-desktop দিয়ে দেখুন প্যাকেজটি ইনস্টল আছে কি না। না থাকলে sudo apt install ./docker-desktop-amd64.deb দিয়ে আবার ইনস্টল করুন।
Windows-এ VMware-এর ভেতরের Ubuntu-তে Docker Desktop চলবে কি?
nested virtualization-এ Docker Desktop for Linux চালানোয় Docker কোনো সাপোর্ট দেয় না। তাদের পরামর্শ হলো নেটিভভাবে ইনস্টল করা। হাইপারভাইজারে nested virtualization চালু করে চেষ্টা করা যায়, তবে সেটা Docker-এর সাপোর্টের বাইরে। VM-এর ভেতরে কন্টেইনার চালাতে Docker Engine সহজ, কারণ Engine নিজের কোনো VM চালায় না।
Docker Desktop চালুর পর আমার পুরনো image দেখা যাচ্ছে না কেন?
চালু হওয়ার সময় Desktop current context বদলে desktop-linux করে, আর বন্ধ হলে আবার default-এ ফিরিয়ে দেয়। Engine-এর image থাকে default context-এর daemon-এ। Desktop নিজের ডেটা রাখে একটি আলাদা disk image ফাইলে। তাই আপনার image মুছে যায়নি। docker context ls দিয়ে চালু context দেখুন, আর docker context use default দিয়ে Engine-এ ফিরে যান।