আমি কীভাবে একটি ডকার ধারক সূচনা ডিবাগ করতে পারি?

আমি একটি ধারক সঙ্গে একটি সমস্যা ছিল, এটি সঠিকভাবে শুরু হয় না পুরোপুরি তৈরী করে, যদিও. কারণটি এমন একটি কার্যকারিতা যা আমি ডকারফিলে যুক্ত করেছি (স্ব-কনফিগার করা /ইত্যাদি / হোস্ট রাউটিং করার জন্য)

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