Docker معطّل على Ubuntu 16.04؟

تعطل تثبيت Docker الخاص بي عندما حاولت تحديث مدير Docker عبر واجهة الويب. أعرف أن تثبيت Docker معطوب لأنني اتبعت توصية سام وحصلت على هذا:

$ docker run -it --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:9572f7cdcee8591948c2963463447a53466950b3fc15a247fcad1917ca215a2f
Status: Downloaded newer image for hello-world:latest
docker: Error response from daemon: no status provided on response: unknown.
ERRO[0003] error waiting for container: context canceled

ثم وجدت هذه المشكلة على GitHub والتي تبدو متطابقة مع ما أراه:

بما أنني أستخدم Ubuntu 16.04، يبدو أن هذا هو الحل:

  1. أضف مستودع deb:
sudo add-apt-repository 'deb http://security.ubuntu.com/ubuntu xenial-security main universe'
  1. قم بتثبيت runc (لاحظ وجود الرموز ~، فقد أفسدها GitHub في المنشور الأصلي لـ @vietthang207):
sudo apt-get install runc=1.0.0~rc7+git20190403.029124da-0ubuntu1~16.04.4
  1. يؤدي تثبيت runc إلى إزالة docker-ce، لذا أعد تثبيته:
sudo apt-get install docker-ce

هل يمكن لأحد تأكيد ما إذا كان من الآمن القيام بذلك أو ما ستكون عواقبه؟ أنا خائف قليلاً من أن يؤدي ذلك إلى إلغاء تثبيت Docker. أفترض أن هذا يعني أن موقعي سيتوقف أثناء العملية (من الغريب أنه لا يزال قيد التشغيل حاليًا، على الرغم من تعطل Docker). لكن هل تثبيت Discourse الخاص بي آمن أم ستختفي الحاويات الخاصة بي أيضًا؟

تعديل: هذا هو مدى ما تجرأت على الذهاب إليه:

$ sudo apt-get install runc=1.0.0~rc7+git20190403.029124da-0ubuntu1~16.04.4
[sudo] password for christoph:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  aufs-tools cgroupfs-mount docker-ce-cli libltdl7
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
  containerd.io docker-ce
The following NEW packages will be installed:
  runc
0 upgraded, 1 newly installed, 2 to remove and 21 not upgraded.
1 not fully installed or removed.
Need to get 1,890 kB of archives.
After this operation, 192 MB disk space will be freed.
Do you want to continue? [Y/n] n
Abort.
$

هل قمت بإعادة التشغيل؟ واجهتُ مشاكل مع Docker إذا قمت بترقية النظام ولم أُعيد التشغيل.

نعم، هذا يبدو مُخيفًا. أعرف أن لدي مواقع تعمل على إصدار 16.04 وأعلم أنني لم أقم بأي إجراء يتعلق بـ runc.

إذا كنت قلقًا بشأن وقت التوقف وأنت تستخدم Digital Ocean، فقد يكون من الأفضل ببساطة:

  1. إنشاء Droplet جديد بإصدار 18.04 وإجراء تثبيت نظيف.
  2. الحصول على عنوان IP عائم، وتوجيهه إلى الخادم القديم، ثم تحديث DNS ليتوافق معه.
  3. وضع المنتدى القديم في وضع القراءة فقط.
  4. عمل نسخة احتياطية.
  5. استعادة البيانات على الخادم الجديد.
  6. إعادة توجيه عنوان IP العائم إلى الخادم الجديد.

لن يكون هناك توقف في الخدمة سوى الفترة الزمنية اللازمة لعملية النسخ الاحتياطي والاستعادة بينما يكون المنتدى في وضع القراءة فقط. يمكنك ممارسة هذه الخطوات عدة مرات قبل تطبيق وضع القراءة فقط. كما يمكنك استخدام rsync لنقل الملفات المرفوعة بدلاً من تضمينها في النسخ الاحتياطي، مما يعني أنك ستحتاج فقط إلى نسخ قاعدة البيانات احتياطيًا واستعادتها.

من المرجح أيضًا أن ترغب في نقل شهادات Let’s Encrypt الحالية الخاصة بك، وإلا، أعتقد أنك ستحتاج إلى إعادة بنائها للحصول عليها.

كنت أفكر في ذلك، لكنني قررت عدم القيام بذلك، حيث اعتقدت أنه بما أن تثبيت Docker الخاص بي معطّل ظاهريًا ولكن المنتدى لا يزال يعمل، فقد يؤدي إعادة تشغيل الخادم إلى تعطيل المنتدى أيضًا. ما هي احتمالات حدوث ذلك؟ هل يجب أن أجرب إعادة التشغيل؟

شكرًا لك على شرحك لتقليل وقت التوقف. لكن لا، أنا لست على DO. لكن وقت التوقف ليس مشكلة على الإطلاق طالما أنني أعرف أنه لن يستمر لساعات أو أيام عديدة.

إذا قمت بترقية Docker، فلا يزال مثبتًا، وظهَرَت هذه المشكلة عند الترقية، فأنا متأكد جدًا من أن إعادة التشغيل ستحل مشكلتك. ملاحظة: النصيحة المجانية تساوي ما تدفعه. :wink:

قم بنسخ احتياطي قبل إعادة التشغيل. في أسوأ الحالات، مع وجود النسخ الاحتياطي وملف app.yml، يمكنك تشغيل خادم جديد والبدء من جديد في أقل من ساعة (ما لم يكن لديك عشرات الجيجابايت من البيانات، ربما).

من المرجح أن يعمل خطتي مع العديد من خدمات الاستضافة.

إذا كنت شديد الحذر، يمكنك تشغيل خادم جديد في مكان ما وسحب نسخة احتياطية إليه، بحيث إذا ساءت الأمور بشكل رهيب، سيكون لديك خطة بديلة.

أقدر ذلك جدًا.

في الواقع، أعتقد أنها تستحق أكثر من ذلك بكثير. لكنني أفهم ما تقصده.

لأكون دقيقًا:

  1. حاولت ترقية مدير Docker عبر واجهة Discourse الويب وفشل الأمر (نشرت الأخطاء هنا)
  2. ثم جربت . /launcher rebuild app لكنه فشل وأرسلني إلى Troubleshoot docker installation issues
  3. أدركت حينها أنني ربما يجب أن أستخدم أمرًا مختلفًا لأن لدي حاويات منفصلة للبيانات وweb_only، لذا جربت ./launcher bootstrap web_only لكنه أعطاني نفس الخطأ.
  4. اتبعت تعليمات Troubleshoot docker installation issues. الباقي موجود في المنشور الأصلي.

أظن أنني سأحاول إعادة التشغيل في عطلة نهاية الأسبوع عندما أكون لدي وقت لإصلاح أي مشاكل لاحقة محتملة. لأن: لا، على الرغم من أنني قمت بإعداد ثلاث نسخ من Discourse قبل سنوات، فإن “إعداد خادم جديد والبدء من جديد” ربما سيشغلني طوال يوم كامل. مجرد توجيه نطاق الإنترنت إلى عنوان IP الجديد قد يكون كابوسًا محتملًا للتنفيذ. أو ربما لا، لكن اكتشاف أن الأمر ليس بالأمر الكبير سيستغرق أيضًا بعض الوقت…

حسنًا، بما أنني قضيت مئات الساعات (وقت أكثر بكثير مما لو كنت قد قمت فقط بـ “تركيبات حرفية” قدمها سلفي)، إذا كنت تعرف كيفية تكوين DNS، فإن تركيباتي مؤتمتة بالكامل وتستغرق أقل من ساعة (معظم الوقت هو وقت انتشار DNS).