كيف يمكنني تصحيح تهيئة حاوية عامل الميناء?

كان لي مشكلة مع حاوية ، على الرغم من أنه يبني تماما أنها لا تبدأ بشكل صحيح. السبب هو الحل الذي أضفته إلى دوكيرفيل (لوجود التوجيه الذاتي تكوين / الخ / المضيفين)

RUN mkdir -p -- /lib-override /etc-override && cp /lib/libnss_files.so.2 /lib-overrideADD hosts.template /etc-override/hostsRUN perl -pi -e 's:/etc/hosts:/etc-override/hosts:g' /lib-override/libnss_files.so.2ENV LD_LIBRARY_PATH /lib-override

من الواضح أن هناك بعض الخطأ هناك ، لكنني أتساءل كيف يمكنني الحصول على مزيد من المعلومات حول ما يفعله عامل الميناء أثناء التشغيل. على سبيل المثال ، هذا يعمل:

$ docker run image lsusr bin ...

لكن هذا لا:

$ docker run image ls -l$

لا يوجد شيء في السجلات ولا يمكنني استدعاء قذيفة تفاعلية أيضا. يمكنني استخدام ستريس لمعرفة ما يحدث ولكن كنت آمل ثيريس طريقة أفضل.

هل هناك أي طريقة يمكنني تعيين عامل الميناء لتكون أكثر مطول?

تحرير: بفضل أندرو د. أعرف الآن ما هو الخطأ في الكود أعلاه (تركته حتى يمكن فهم إجابته). الآن لا تزال المشكلة كيف يمكنني تصحيح شيء من هذا القبيل أو الحصول على بعض الدواخل في السبب إل إس-إل فشل لماذا لس لم يفعل.

تحرير: و-د = صحيح قد تعطي المزيد من الانتاج ، ولكن ليس في حالتي...

عامل الميناء events قد يساعد الأمر و سجلات عامل الميناء الأمر يمكن جلب السجلات حتى بعد فشل الصورة لبدء.

البداية الأولى docker events في الخلفية لمعرفة ما يحدث.

docker events&

ثم قم بتشغيل الفشل الخاص بك docker run ... الأمر. ثم يجب أن ترى شيئا مثل ما يلي على الشاشة:

2015-12-22T15:13:05.503402713+02:00 xxxxxxxacd8ca86df9eac5fd5466884c0b42a06293ccff0b5101b5987f5da07d: (from xxx/xxx:latest) die

ثم يمكنك الحصول على معرف عرافة بدء التشغيل من الرسالة السابقة أو إخراج الأمر تشغيل. ثم يمكنك استخدامه مع الأمر سجلات:

docker logs <copy the instance id from docker events messages on screen>

يجب أن ترى الآن بعض المخرجات من بدء تشغيل الصورة الفاشل.

كما اقترح اليكسب في تعليق: docker events& يمكن أن تكون مزعجة إذا تم إعادة تشغيل الحاوية الخاصة بك باستمرار من شيء مثل خدمة أوس إكس. في هذا السيناريو قد يكون من الأسهل للحصول على معرف عرافة حاوية من السجلات في /var/log/ecs/ecs-agent.log.<DATE>. ثم استخدم عامل الميناء logs <hex id>.

حسنا ، أفضل ما اكتشفته حتى الآن هو:

#stop the current demon and start it in debug modussudo service docker stopdockerd -D # --debug

مجرد بدء العميل من قذيفة جديدة. كان الاعتقاد الخاطئ هو الاعتقاد بأن العميل يفعل أي شيء على الإطلاق... حسنا انها مجرد التواصل مع الخفي ، لذلك كنت لا تريد تصحيح العميل ولكن الخفي نفسه (عادة).

في حالتي ، فإن -a (نعلق على ستدوت/ستدير) العلم كان كافيا:

user@machine:~$ docker start -a server_nameError: The directory named as part of the path /log/log_path/app.log does not exist.For help, use /usr/bin/supervisord -h

أظهر خطأ بدء التشغيل (في حالتنا ، مسار سجل مفقود يستخدمه supervisord). أفترض أن معظم أخطاء بدء تشغيل الحاوية ستظهر هنا أيضا.

لا أستطيع الإجابة على سؤالك حول كيفية جعل الإخراج عامل الميناء أكثر اكتمالا ولكن أستطيع أن أقول لكم أن التعبير العادي في مكان استبدال سلسلة في ملف لذلك هو مجنون قليلا: السلسلة لديها فقط الكثير من المساحة المخصصة لذلك ، وإذا قمت بتغيير إزاحة الملف من الإدخالات الأخرى ، يصبح ملف قزم تالف. حاول تشغيل أوبجدومب أو ريديلف على الخاص بك. حتى الملف بعد تشغيل الأمر بيرل (قبل تغيير مسار المكتبة دولار إلى الكعك هو الآن فاسد.

السبب يعمل في هذا الإختراق الضروري للأسف لأن "تمب" و " الخ " هي نفس طول السلسلة لذلك لا تغيير إزاحة. النظر في الدليل /دكر أو ما شابه ذلك إذا كنت تفضل عدم استخدام / تمب.

إذا كان يجب أن تأخذ هذا النهج والمسارات المطلوبة غير قابلة للتغيير ، وإعادة بناء المكتبة وتغيير المسار الافتراضي ل / الخ / المضيفين في المصدر. أو أفضل ، عند بناء التعديل الخاص بك libnss_files.so تسميته إلى شيء من هذا القبيل libnss_altfiles.so والتغيير nsswitch.conf لاستخدام hosts: altfiles عند بدء حاوية عامل الميناء الخاص بك (ما لم يكن عامل الميناء ربط شنت نسويتش.أسيوط كذلك ، ثم لا يمكنك تغييره). هذا وسوف تتيح لك الحصول على libnss_altfiles.so بالتوازي مع المكتبات العادية في النظام الأساسي. إذا عامل الميناء لا ربط-جبل نسويتش.أسيوط, اترك نسخة من إعادة بنائها libnss_files.so في الدليل الخاص بك / ليب تجاوز جاهزة ليتم تحميلها من قبل لد المكتبة.

كما رؤساء متابعة ، سويد/سجيد الثنائيات تجاهل ل_ليبراري_باث و ل_بريلواد ، لذلك بعض الاشياء سوف كسر (قراءة: العودة إلى استخدام الافتراضي /الخ/المضيفين) إذا كنت تستخدم هذه المتغيرات.

في بعض الأحيان ، يمكنك العثور على رسائل خطأ مفيدة عن طريق سشينغ في عقدة تشغيل الخفي عامل الميناء ومن ثم القيام:

$ tail -f /var/log/containers/* /var/log/docker.log 2>&1

على 'عامل الميناء الجماعة الطبعة' على نظام التشغيل ماك ، يمكنك الاتصال في فم عامل الميناء عن طريق القيام:

$  screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

يرجى بذل الجهد لوضع علامة على إحدى الإجابات على أنها “مقبولة” ، شكرا!