@codinghorror هذا كله جيد ورائع، ولكن إذا كان تثبيت standalone القياسي هو الطريقة الوحيدة المفترض أن يعمل بها Discourse، فلماذا توفير دعم لتكوين حاوية yml في ./containers، وتضمين أمثلة على ذلك في ./samples؟ الملف الذي استخدمته معلق بالكامل مع تعليمات التشغيل، وتحديداً هذا الجزء:
# أي حجج إضافية لـ Docker؟
# docker_args:
الشيء الوحيد الذي أستخدمه هو:
docker_args: "--network reverse-proxy"
والذي، مرة أخرى، كان يعمل بشكل ممتاز لمدة عام. لذا، من الواضح أن شيئاً ما قد تغير. يرجى فهم أنني لا أحاول أن أكون متحدياً (سيكون ذلك سخيفاً بعض الشيء بما أنني أطلب المساعدة)، لكنني حقاً أحاول توضيح أنني أستخدم خيارات متاحة من خلال عينات Discourse.
ربما لو فهمت كيف يتم توليد عنوان MAC هذا، فقد يوجهني ذلك إلى مشكلة تتعلق بتغيير البيئة، وهذا ما آمل فيه.
أرى هذا في launcher:
if [ -z "$SKIP_MAC_ADDRESS" ] ; then
mac_address="--mac-address $($docker_path run $user_args -i --rm -a stdout -a stderr $image /bin/sh -c "echo $hostname | md5sum | sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/'")"
fi
سأقوم بتحليل الأمر لمعرفة ما إذا كان بإمكاني فهمه.
تحديث: وبالنظر إلى هذا، أرى أنه يمكنني استخدام --skip-mac-address. عند القيام بذلك، يتم تشغيل مثالي بشكل صحيح، لذا يبدو أن العملية التي تحسب عنوان MAC هي المشكلة.
إذن، باختصار. عملية البناء تنجح بغض النظر عن أي شيء، لكن في عملية البناء (./launcher rebuild myinstance)، تفشل الخطوة الأخيرة المتمثلة في تشغيل الحاوية بسبب عدم تعيين عنوان MAC بطريقة ما.
ومع ذلك، يمكنني ببساطة تنفيذ الأمر ./launcher start myinstance بعد ذلك، وعندها يبدأ العمل بشكل صحيح، ويكون عنوان MAC موجودًا أيضًا. الأمر غريب، هذا كل شيء.
أواجه نفس المشكلة. @codinghorror إليك خطوات إعادة إنتاج المشكلة وسبب محتمل لحل هذه المشكلة العائدة:
خطوات إعادة الإنتاج:
اضبط في تكوين الحاويات (app): docker_args: "--network reverse-proxy"
أعد البناء ./launcher rebuild app
راقب ظهور الخطأ /usr/bin/docker: --network ليس عنوان MAC صالحًا
هذه مشكلة تم إدخالها عبر الالتزام bfc79e7 (GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub)
يتم استدعاء merge_user_args بواسطة set_template_info، لكن set_template_info يُستدعى مرتين عند إعادة البناء (run_run و run_bootstrap)
لذلك، بدلًا من أن يكون user_args يساوي $user_args $docker_args، يصبح لدينا $user_args $docker_args $docker_args
لا يسمح Docker بتكوين نفس الشبكة عدة مرات docker: تم تحديد الشبكة "reverse-proxy" عدة مرات
شكرًا على التراجع عن هذا الالتزام أو جعل merge_user_args خاليًا من الأثر (idempotent).