شكرًا لك، لكن الاعتماد على أداة سطر أوامر تعتمد على النظام الأساسي داخل الإضافة للحصول على المعلومات لا يعمل (كما هو مطلوب) بالنسبة لي (فشل استخلاص معرف Docker من الأمر أدناه في بيئة Ubuntu 18.04 الخاصة بنا):
# cat /proc/self/cgroup|grep "systemd:/docker"| awk -F/ '{print $3}'|cut -c1-12
#. (لا توجد نتائج)
حتى هذا الأمر لا يُعطي أي نتيجة:
# cat /proc/self/cgroup|grep "systemd:/docker"
# (لا توجد نتائج)
لمعلومتك (من أمر docker ps):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63c52bc571b5 local_discourse/socket-only "/sbin/boot" 28 minutes ago Up 28 minutes socket-only
631fbabedda9 local_discourse/socket-only2 "/sbin/boot" 26 hours ago Up 26 hours socket-only2
123743e12208 mysql/mysql-server "/entrypoint.sh mysq…" 2 days ago Up 20 hours (healthy) 33060/tcp, 0.0.0.0:6603->3306/tcp mysql-man
7a145366268c registry.unix.com/unix:condor "/run.sh" 6 days ago Up 20 hours 3306/tcp, 0.0.0.0:8999->80/tcp unix
3cc0c90c3e3a registry:2 "/entrypoint.sh /etc…" 7 days ago Up 7 days 0.0.0.0:5000->5000/tcp hubby
ca7b55fc5a0c local_discourse/data "/sbin/boot" 2 weeks ago Up 8 days data
هذا يعني أنه يجب استخلاص المعلومة (النص الذي يحدد اسم الحاوية قيد التشغيل) من متغير بيئي في ملف yml. وذلك لضمان أن المعلومة محايدة من حيث النظام الأساسي، ويمكن أن تعمل حتى عند تشغيل حاويات متعددة في آن واحد.
على سبيل المثال، نقوم بتشغيل عدة تطبيقات Discourse وحاويات أخرى في نفس الوقت، وبالتالي فإن استخدام أوامر docker-cli لن يوفر المعلومات الدقيقة التي نحتاجها (اسم الحاوية قيد التشغيل على الويب “في الوقت الفعلي”، والذي تحدده إعدادات وكيل العكس proxy وليس Docker).
نختار الحاوية التي سيتم عرضها عن طريق تغيير اسم منفذ Unix socket (أو منفذ الحاوية المكشوف) في إعدادات وكيل العكس، مما يسمح لنا بالتبديل بين الحاويات في أقل من ثانية دون أي توقف. وهذا يعني أن اسم الحاوية يجب (يجب بالضرورة) أن يأتي من متغير بيئي في ملف yml ليكون موثوقًا ودقيقًا بنسبة 100%.
لذلك، فإن مطلبنا هو أن يأتي النص (اسم الحاوية، معرف الحاوية، إلخ) فقط من المتغيرات البيئية في ملف yml.
بالنسبة لأي شخص يفضل استخدام معرف الحاوية، يمكنه إضافته إلى متغيره البيئي بهذه الطريقة (كمثال):
DISCOURSE_APP_CONTAINER_NAME = 'socket-only (63c52bc571b5)'
أو حتى:
DISCOURSE_APP_CONTAINER_NAME = '63c52bc571b5'
DISCOURSE_DATA_CONTAINER_NAME = 'ca7b55fc5a0c'
وبحسب منشوري الأصلي (الطريقة التي نريد استخدامها):
DISCOURSE_APP_CONTAINER_NAME = 'socket-only'
DISCOURSE_DATA_CONTAINER_NAME = 'data'
وسيتم تحديد أي معرف (اسم، معرف حاوية، أو كليهما) بناءً على متطلبات مسؤول النظام (أو المؤسسة).
لهذا السبب كنت محددًا في التأكيد على أن المعلومة يجب أن تُدمج يدويًا في ملف yml الرئيسي كتغير بيئي (وليس من أوامر سطر الأوامر مثل docker ps أو أوامر النظام الأساسية الأخرى).
أتمنى أن يكون هذا قد جعل مطلبًا أكثر وضوحًا.
أريد أن يكون هذا محايدًا من حيث النظام الأساسي والإعدادات، وغير معتمد على أوامر سطر الأوامر أو أوامر النظام. نحن نستخدم Docker للعديد من التطبيقات الأخرى وليس فقط Discourse على خوادمنا (بما في ذلك Discourse، وتطبيقات LAMP المعبأة بـ Docker، وسجلات Docker الخاصة، وغيرها، كما يمكنكم ملاحظته من مخرجات أمر docker ps أعلاه).