[{"data":1,"prerenderedAt":189},["ShallowReactive",2],{"seo-verification":3,"blog-docker-v29-على-vps-الهجرة-دون-كسر-المكدسات-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"slugs":9,"title":12,"excerpt":13,"readTime":14,"views":15,"isPinned":16,"publishedAt":17,"category":18,"categories":23,"featuredImage":25,"bgImage":26,"posterImage":27,"relatedSolution":25,"intro":28,"sections":29,"ctaTitle":133,"ctaBody":134,"ctaButton":135,"ctaUrl":136,"relatedPosts":137},247,"docker-v29-على-vps-الهجرة-دون-كسر-المكدسات",{"fr":10,"en":11,"ar":8},"docker-v29-migration-vps-breaking-changes","docker-v29-on-vps-migrate-without-breaking-your-stacks","Docker v29 على VPS: الهجرة دون كسر المكدسات","Docker Engine v29 يُغيّر الحد الأدنى لـ API وخلفية الشبكة ومخزن الصور. دليل الهجرة للوكالات التي تدير أسطول VPS لعملائها.",11,0,false,"2026-08-12T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":21},3,"النشر","deploiement","bg-success\u002F10 text-success",[24],{"id":19,"name":20,"slug":21,"color":22,"icon":21},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fdocker-v29-migration-vps-breaking-changes-poster.svg","أصدرت Docker نسخة Engine v29 في مارس 2026، وقد غيّرت ثلاثة أسس في آنٍ واحد: الحد الأدنى لإصدار API، وخلفية الشبكة ‏(nftables)‏، ومخزن صور containerd. يتعطّل الخادم الافتراضي غير المُعدّ بصمت عند استقبال هذا التحديث — إذ يتوقف `docker-compose` v1 المستقل عن العمل، ولا يعود Dockge يبدأ، وتختفي قواعد iptables التي كانت مكدّساتك تعتمد عليها. يُمكّنك هذا الدليل من اكتشاف ما تعطّل، والهجرة بشكل نظيف، ومنع `apt upgrade` التالي من أن يتحوّل إلى حادثة في الساعة الثانية صباحاً.",[30,34,45,48,58,67,76,85,105,109,112,130],{"type":31,"title":32,"body":33},"h2","لماذا يكسر Docker v29 المكدسات الحالية — ولماذا الآن","تقع وكالة تُدير أسطول VPS لعملائها في موقف صعب: التحديث الخارجي (Docker أو Ubuntu أو Debian) يصل من الخارج بصرف النظر عمّن يُدير الخادم. حين يتلقّى VPS العميل `apt upgrade` دون رقابة، تصل ثلاثة تغييرات كاسرة في آنٍ واحد.\n\n**الكسر الأول — الحد الأدنى لإصدار API.** يرفع Docker Engine v29 الحد الأدنى لإصدار API إلى `1.44`. تفشل العملاء التي تعمل بالنسخة المستقلة القديمة `docker-compose` v1 ‏(الملف `\u002Fusr\u002Flocal\u002Fbin\u002Fdocker-compose`)‏ فوراً: تعليماتها البرمجية مُترجَمة لإصدارات API أقدم، ويرفض daemon الاتصال برسالة عدم توافق.\n\n**الكسر الثاني — خلفية شبكة nftables.** يُفعّل Docker v29 nftables افتراضياً عوضاً عن iptables لإدارة قواعد جدار حماية شبكات Docker. لا ترى النصوص البرمجية الخارجية التي تفحص سلاسل iptables مباشرةً ‏(نصوص المراقبة، وجدران الحماية المُخصّصة، وبعض قواعد UFW)‏ قواعد Docker بعد الآن — ليس لأنها اختفت، بل لأنها تعيش الآن في nftables.\n\n**الكسر الثالث — مخزن صور containerd.** ينتقل خلفية تخزين الصور إلى مخزن containerd. وهو قيد التفعيل الاختياري منذ v29، وسيصبح الافتراضي في v30.\n\nالاعتراض الكلاسيكي — «عملاؤنا يُديرون VPS بأنفسهم» — لا يوفر حمايةً. يأتي الكسر من الخارج، والوكالة هي من يتصل بها العميل حين يتوقف موقعه.",{"type":35,"title":36,"items":37},"ul","ما يُمكّنك هذا الدليل من فعله",[38,39,40,41,42,43,44],"**اكتشاف التوتر في إصدار API** بين عميل `docker` الخاص بك و‏daemon‏ VPS، قبل أن تُنتج الأوامر التالية خطأً غامضاً.","**تحديد في 30 ثانية** ما إذا كان VPS يعمل بـ `docker-compose` v1 المستقل — الملف الثنائي المُهمَل منذ Docker Desktop 3.6 والمُزال من الحزم الرسمية.","**الهجرة إلى إضافة `docker compose` v2** بأمرَين محدَّدَين، ثم التحقق من عمل ملفات `docker-compose.yml` الحالية دون تغيير في البنية.","**فهم تأثير nftables** على مكدّساتك: ما يستمر في العمل ‏(شبكات Docker)‏، وما قد يتعطّل ‏(نصوصك التي تقرأ iptables)‏، وأمر التشخيص الحاسم.","**تفعيل أو تأجيل مخزن containerd** وفق جدول هجرتك، مع مفتاح الإعداد الدقيق وأمر التحقق.","**تقييم توافق** Dockge وPortainer وCasaOS App Store مع v29، لتجنّب اكتشاف عدم التوافق أثناء حادثة لدى العميل.","**تجهيز أسطول VPS العملاء** كي يكون `apt upgrade` التالي حدثاً مُخطَّطاً، لا طارئاً ليليّاً.",{"type":31,"title":46,"body":47},"المتطلبات قبل البدء","يُطبَّق هذا الدليل على أي VPS يعمل بـ Ubuntu 22.04\u002F24.04 أو Debian 11\u002F12 مع تثبيت Docker Engine من المستودعات الرسمية لـ Docker Inc. ‏(وليس حزمة `docker.io` التابعة للتوزيعة)‏. تحتاج إلى وصول SSH كمستخدم root أو sudo. لا يتطلب تشخيص المشكلات أي انقطاع في الخدمة؛ أما نقل إضافة compose فيستغرق ثوانٍ خلالها تكون أوامر `docker compose` غير متاحة. التقط لقطة VPS قبل تعديل `\u002Fetc\u002Fdocker\u002Fdaemon.json` إذا كنت ستُفعّل مخزن containerd.",{"type":49,"title":50,"steps":51},"steps","الخطوة 1 — تشخيص إصدار API",[52,55],{"title":53,"body":54},"التحقق من إصداري API للعميل و‏daemon","شغّل الأمرَين التاليَين على كل VPS تريد فحصه:\n\n```bash\ndocker version --format '{{.Client.APIVersion}}'\ndocker version --format '{{.Server.APIVersion}}'\n```\n\nإذا كان إصدار العميل أقل من `1.44` وكان daemon يعمل بـ v29، ستحصل على خطأ عند الأوامر التالية. العتبة `1.44` هي الحد الأدنى الذي يقبله Docker Engine v29: يفشل عميل مُترجَم لـ `1.43` أو أقدم بالخطأ `Error response from daemon: client version 1.43 is too old. Minimum supported API version is 1.44, please upgrade your client`.\n\nإذا أظهر السطران `1.44` أو أعلى، فعميلك متوافق. انتقل إلى الخطوة التالية.",{"title":56,"body":57},"الكشف عن وجود docker-compose v1 المستقل","أمر `docker-compose` بالشَرطة وأمر `docker compose` بدون شَرطة ليسا الشيء ذاته. v1 ملف ثنائي Python مستقل، أما v2 فإضافة Go مُدمَجة في واجهة Docker.\n\n```bash\nwhich docker-compose && docker-compose --version\n```\n\nإذا أعاد الأمر مساراً في `\u002Fusr\u002Flocal\u002Fbin\u002F` أو `\u002Fusr\u002Fbin\u002F` مع إصدار `1.x.x`، لديك الملف الثنائي المستقل المُهمَل.\n\n```bash\ndocker compose version\n```\n\nإذا أعاد هذا الأمر `Docker Compose version v2.x.x`، فإضافة v2 موجودة بالفعل.",{"type":49,"title":59,"steps":60},"الخطوة 2 — الهجرة من docker-compose v1 إلى إضافة v2",[61,64],{"title":62,"body":63},"إزالة الملف الثنائي v1 وتثبيت الإضافة","```bash\napt remove docker-compose\napt install docker-compose-plugin\n```\n\nعلى VPS يعمل بـ Debian أو Ubuntu ويستخدم المستودعات الرسمية لـ Docker Inc. ‏(`download.docker.com`)‏، تتوفر حزمة `docker-compose-plugin` بدون إعداد إضافي.\n\nللتحقق بعد الهجرة:\n\n```bash\ndocker compose version\n# Docker Compose version v2.36.0\n```",{"title":65,"body":66},"التحقق من توافق بنية ملفات Compose الحالية","الغالبية العظمى من ملفات `docker-compose.yml` المكتوبة لـ v1 تعمل دون تعديل مع إضافة v2. التحقق من ملفاتك:\n\n```bash\ndocker compose config\n```\n\nيُحلّ هذا الأمر متغيرات البيئة ويُتحقق من البنية ويعرض الإعداد المُحلَّل. إخراج بلا أخطاء يعني أن ملفك متوافق.\n\nإذا كانت فريقك يستخدم نصوص shell تحتوي `docker-compose` بالشَرطة، أضف اختصاراً في `\u002Fetc\u002Fbash.bashrc` على VPS:\n\n```bash\nalias docker-compose='docker compose'\n```",{"type":49,"title":68,"steps":69},"الخطوة 3 — فهم تغيير خلفية الشبكة nftables والتكيّف معه",[70,73],{"title":71,"body":72},"التحقق من أن شبكات Docker لا تزال تعمل","البشرى السارة: `docker network` يعمل بشكل صحيح مع nftables. يستمر مرور حركة البيانات بين الحاويات، وترجمة عناوين الشبكة ‏(NAT)‏، وكشف المنافذ في العمل. ما يتغيّر هو الأداة الأساسية التي تكتب القواعد.\n\n```bash\ndocker network ls\n```\n\nشبكات bridge الحالية لا تزال مُدرَجة. للتحقق من أن حاوية تستقبل حركة البيانات على المنفذ المتوقع:\n\n```bash\ncurl -s http:\u002F\u002Flocalhost:8080\u002Fhealth\n```",{"title":74,"body":75},"تشخيص التأثير على نصوص iptables البرمجية","تظهر المشكلة حين يفحص نص برمجي خارجي ‏(مراقبة، أو Ansible، أو قواعد UFW)‏ `iptables` للتحقق من وجود قواعد Docker:\n\n```bash\niptables -L DOCKER 2>&1\n```\n\nمع خلفية nftables، هذه السلسلة فارغة أو غائبة. يُعيد النص خطأً بينما Docker يعمل بشكل مثالي. هذا ليس فشلاً في Docker — أداة التدقيق لم تعد تنظر في المكان الصحيح.\n\nلفحص القواعد الفعلية:\n\n```bash\nnft list ruleset | grep -A 20 'docker'\n```",{"type":49,"title":77,"steps":78},"الخطوة 4 — تقييم مخزن صور containerd وتفعيله",[79,82],{"title":80,"body":81},"التحقق من برنامج تشغيل التخزين الحالي","```bash\ndocker info | grep 'Storage Driver'\n```\n\nعلى VPS مُحدَّث إلى v29 بدون تغييرات في الإعداد، تحصل عادةً على `Storage Driver: overlay2`. مخزن containerd اختياري في v29 — لا يُفعَّل تلقائياً. سيصبح الافتراضي في v30.",{"title":83,"body":84},"تفعيل مخزن containerd (اختياري، يُنصح به قبل v30)","لتفعيل مخزن containerd في v29 والاستعداد للهجرة قبل فرضها في v30، أضف المفتاح التالي إلى `\u002Fetc\u002Fdocker\u002Fdaemon.json`:\n\n```bash\n{\n  \"features\": {\n    \"containerd-snapshotter\": true\n  }\n}\n```\n\nأعد تشغيل daemon:\n\n```bash\nsystemctl restart docker\n```\n\nللتحقق:\n\n```bash\ndocker info | grep 'Storage Driver'\n# Storage Driver: overlayfs\n```",{"type":86,"title":87,"headers":88,"rows":92},"comparison","توافق الأدوات الخارجية مع Docker Engine v29",[89,90,91],"الأداة","حالة التوافق مع v29","الإجراء الموصى به",[93,97,101],[94,95,96],"**Dockge** (حتى ‏1.4.1‏ مشمولاً)","غير متوافق: يستدعي daemon الخاص بـ Dockge مسارات API مُزالة في v29. لا يبدأ اللوحة بعد تحديث Docker.","تحديث Dockge إلى الإصدار ‏1.4.2‏ أو أعلى. التحقق من ملاحظات الإصدار قبل `apt upgrade` على أي VPS يستضيفه.",[98,99,100],"**Portainer** (Community Edition \u003C ‏2.21‏)","متوافق جزئياً: الواجهة تعمل، لكن بيئات Docker المستقلة قد تُظهر أخطاءً في عروض الشبكة. الإصدار ‏2.21‏ يُصلح استدعاءات nftables.","تحديث Portainer عبر `docker pull portainer\u002Fportainer-ce:latest` ثم `docker compose up -d` قبل ترقية Docker Engine.",[102,103,104],"**CasaOS App Store**","توافق جزئي موثَّق: التطبيقات المُنشَرة تستمر في العمل، لكن مدير التطبيقات قد يُبلّغ عن أخطاء عند فحص الصور إذا كان مخزن containerd مُفعَّلاً.","إبقاء مخزن containerd في وضع الإيقاف ‏(افتراضي v29)‏ على VPS التي تعمل بـ CasaOS حتى صدور إصدار تصحيحي. الاختبار على بيئة نسخة قبل أي تحديث.",{"type":106,"title":107,"body":108},"tip","اختبر الهجرة على لقطة قبل لمس بيئة الإنتاج","يتيح لك VPS بصلاحية root ولقطات فورية التحقق من كل خطوة في هذه الهجرة دون مخاطرة. أنشئ لقطة باسم `before-docker-v29`، نفّذ الهجرة الكاملة، تحقق من مكدّساتك، ثم احذف اللقطة. إذا حدث خطأ في الطريق، يُعيد الاستعادة VPS إلى حالته الأولية في أقل من خمس دقائق.",{"type":31,"title":110,"body":111},"استكشاف الأخطاء — أخطاء حقيقية وحلول","تُغطّي السيناريوهات التالية غالبية الحوادث المُلاحَظة خلال هجرات Docker v29 على أساطيل VPS.",{"type":49,"title":113,"steps":114},"سيناريوهات الأخطاء الشائعة",[115,118,121,124,127],{"title":116,"body":117},"الخطأ: `client version X.XX is too old. Minimum supported API version is 1.44`","**السبب**: الملف الثنائي المستقل `docker-compose` v1 لا يزال موجوداً ويحاول التواصل مع daemon الإصدار v29.\n\n**الحل**:\n\n```bash\napt remove docker-compose\napt install docker-compose-plugin\ndocker compose version\n```\n\nإذا كان الملف الثنائي مُثبَّتاً يدوياً ‏(خارج apt)‏، ابحث عنه:\n\n```bash\nwhich docker-compose\nrm \u002Fusr\u002Flocal\u002Fbin\u002Fdocker-compose\n```",{"title":119,"body":120},"الخطأ: `docker-compose: command not found` بعد `apt upgrade`","**السبب**: تمت إزالة حزمة `docker-compose` ‏(v1)‏ أثناء التحديث، ولم تُثبَّت إضافة v2.\n\n**الحل**:\n\n```bash\napt install docker-compose-plugin\n```",{"title":122,"body":123},"الخطأ: `iptables: No chain\u002Ftarget\u002Fmatch by that name` في نص مراقبة","**السبب**: نصك البرمجي يفحص سلسلة `DOCKER` في iptables، لكن Docker v29 مع nftables لا يكتبها هناك بعد الآن.\n\n**الحل**: استبدل فحص iptables بفحص nftables:\n\n```bash\nnft list ruleset | grep -c 'docker'\n```\n\nإذا كان العدد أكبر من صفر، فقواعد Docker موجودة في nftables.",{"title":125,"body":126},"Dockge لا يبدأ بعد التحديث","**السبب**: Dockge ‏1.4.1‏ وما قبله يستدعي مسارات API غائبة من Docker Engine v29.\n\n**الحل**:\n\n```bash\ncd \u002Fopt\u002Fdockge\ndocker compose pull\ndocker compose up -d\n```",{"title":128,"body":129},"الحاويات لا تستجيب على منافذها بعد إعادة تشغيل daemon","**السبب**: عند أول إعادة تشغيل لـ `dockerd` في وضع nftables، تُعاد كتابة قواعد NAT في الخلفية الصحيحة، لكن بعض التوزيعات تعاني تعارضاً بين خدمة `iptables-legacy` وnftables.\n\n**الحل**:\n\n```bash\nsystemctl stop docker\nsystemctl disable iptables\nsystemctl start docker\n```\n\nثم تحقق من إعادة تشغيل الحاويات وكشف المنافذ:\n\n```bash\ndocker compose up -d\ndocker ps --format 'table {{.Names}}\\t{{.Ports}}'\n```",{"type":31,"title":131,"body":132},"تجهيز أسطولك لتجنّب الحادثة التالية","هجرة Docker v29 المُدارة جيداً ليست حدثاً منفرداً — بل فرصة لوضع الممارسات التي تمنع الطارئ الليلي التالي.\n\n**أوقف تحديث Docker تلقائياً في `apt`.** على VPS العملاء، امنع Docker من التحديث أثناء `apt upgrade` غير المُشرَف عليها:\n\n```bash\napt-mark hold docker-ce docker-ce-cli containerd.io\n```\n\nأزل الإيقاف ‏(`apt-mark unhold`)‏ فقط حين تكون مستعداً للهجرة، بعد الاختبار على لقطة.\n\n**أتمتة تدقيق الأسطول.** يستغرق playbook Ansible الذي يتحقق من إصدار API على كل VPS أقل من ساعة لكتابته.","‏VPS‏ جاهزة لـ Docker v29 — مع لقطات وصول root","تحتاج الوكالة التي تُدير عدة VPS لعملائها إلى بنية تحتية Docker متجانسة، مُنظَّمة بإصدارات ومُجهَّزة للتحديثات الخارجية. تُوفّر ServOrbit ‏VPS‏ بصلاحية root وعنوان IPv4 مخصص ولقطات فورية — لاختبار كل هجرة أولاً على بيئة نسخة، لا على خادم عميل إنتاجي.","اكتشف خوادم VPS Cloud","\u002Fsolutions\u002Fagences",[138,152,172],{"id":139,"slug":140,"slugs":141,"title":144,"excerpt":145,"readTime":146,"views":15,"isPinned":16,"publishedAt":147,"category":148,"categories":149,"featuredImage":25,"bgImage":26,"posterImage":151,"relatedSolution":25},229,"docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط",{"fr":142,"en":143,"ar":140},"docker-compose-production-checklist","docker-compose-in-production-10-point-checklist","Docker Compose في الإنتاج: قائمة التحقق من 10 نقاط","‎10 إعدادات Docker Compose يجب التحقق منها قبل أي نشر إنتاجي: إعادة التشغيل والفحوص الصحية والحدود والأسرار والسجلات.",14,"2026-08-06T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":21},[150],{"id":19,"name":20,"slug":21,"color":22,"icon":21},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",{"id":153,"slug":154,"slugs":155,"title":158,"excerpt":159,"readTime":160,"views":161,"isPinned":16,"publishedAt":162,"category":163,"categories":169,"featuredImage":25,"bgImage":26,"posterImage":171,"relatedSolution":25},224,"التطبيقات-المستضافة-ذاتيا-روتين-التصحيحات",{"fr":156,"en":157,"ar":154},"routine-correctifs-apps-self-hosted","self-hosted-apps-the-patching-routine","التطبيقات المستضافة ذاتيًا: روتين التصحيحات","الجرد ونشرات الأمان ونافذة التصحيح والنسخ الاحتياطي والتحقق: الروتين الذي تفتقده معظم المنظومات المستضافة ذاتيًا.",4,1,"2026-08-05T00:00:00+00:00",{"id":164,"name":165,"slug":166,"color":167,"icon":168},8,"الأمان والمراقبة","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[170],{"id":164,"name":165,"slug":166,"color":167,"icon":168},"\u002Fblog\u002Fcovers\u002Froutine-correctifs-apps-self-hosted-poster.svg",{"id":173,"slug":174,"slugs":175,"title":178,"excerpt":179,"readTime":14,"views":161,"isPinned":16,"publishedAt":180,"category":181,"categories":186,"featuredImage":25,"bgImage":26,"posterImage":188,"relatedSolution":25},236,"أتمتة-إدارة-خوادم-vps-باستخدام-ansible",{"fr":176,"en":177,"ar":174},"ansible-automatiser-serveurs-vps","automating-vps-server-management-with-ansible","أتمتة إدارة خوادم VPS باستخدام Ansible","تعرّف على كيفية أتمتة إدارة أسطول خوادم VPS باستخدام ‎Ansible‎: الجرد والـ playbooks والأدوار والـ Vault لبنية تحتية قابلة للتكرار.","2026-08-08T00:00:00+00:00",{"id":182,"name":183,"slug":184,"color":185,"icon":184},2,"الأتمتة","automatisation","bg-brand-action\u002F10 text-brand-action",[187],{"id":182,"name":183,"slug":184,"color":185,"icon":184},"\u002Fblog\u002Fcovers\u002Fansible-automatiser-serveurs-vps-poster.svg",1787580960274]