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


92

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

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

স্পষ্টতই সেখানে কিছু ত্রুটি রয়েছে তবে আমি আশ্চর্য হয়েছি যে দোকার চলার সময় কী করছে সে সম্পর্কে আমি আরও কীভাবে তথ্য পেতে পারি। উদাহরণস্বরূপ, এটি কাজ করে:

$ docker run image ls
usr bin ...

তবে এটি করে না:

$ docker run image ls -l
$

লগগুলিতে কিছুই নেই এবং আমি ইন্টারেক্টিভ শেলটিকেও কল করতে পারি না। কী ঘটছে তা দেখতে আমি স্ট্রেস ব্যবহার করতে পারি তবে আমি আরও ভাল উপায়ের আশা করছিলাম।

আমি আরও ভার্জোজ হতে ডকার সেট করতে পারে এমন কোন উপায় আছে?

সম্পাদনা : অ্যান্ড্রু ডি কে ধন্যবাদ আমি এখন জানি যে উপরের কোডটিতে কী সমস্যা আছে (আমি তার উত্তরটি বুঝতে পারি) এখন বিষয়টি এখনও কিভাবে আমি ভালো কিছু ডিবাগ বা কেন কিছু ভিতরের পেতে পারে ls-l ব্যর্থ কেন নি।

সম্পাদনা : -D = সত্যটি আরও আউটপুট দিতে পারে, যদিও আমার ক্ষেত্রে না ...


একটি উত্তর "স্বীকৃত" হিসাবে চিহ্নিত করার চেষ্টা করুন, ধন্যবাদ!
ব্রায়ান শীর্ষ

উত্তর:


94

ডকার 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>

আপনার এখন ব্যর্থ চিত্র সূচনা থেকে কিছু আউটপুট দেখতে হবে।

যেমন @alexkb একটি মন্তব্যে পরামর্শ দিয়েছে: docker events&আপনার ধারকটি যদি এডাব্লুএস ইসিএস পরিষেবাটির মতো ক্রমাগত পুনরায় চালু করা হয় তবে সমস্যা হতে পারে। এই দৃশ্যে লগ ইন থেকে ধারক হেক্স আইডি পাওয়া সহজ হতে পারে /var/log/ecs/ecs-agent.log.<DATE>। তারপরে ডকার ব্যবহার করুন logs <hex id>


খুব উপকারী! নতুন থেকে ডকার এবং পোর্টেইনার চালু হওয়ার চেষ্টা করছিল। এই ডিবাগিং পদক্ষেপগুলি দিয়ে এটি সমাধান করুন। একই সমস্যা সঙ্গে Medium.com কেউ খুঁজে পাওয়া যায় নি: medium.com/@jameson_37151/...
জেমসন

আমি "পাত্রে পাওয়া যায় নি" !?
অবজ্ঞাত হেজেহোগ

স্ট্রেঞ্জ। কেবলমাত্র নিশ্চিত করার জন্য, @dementedhedgehog আপনি " (from xxx/xxx:latest) die" এ শেষ হওয়া লগ বার্তাটি থেকে হেক্স-আইডি অনুলিপি করার চেষ্টা করেছিলেন ?
পিটার ল্যামবার্গ

1
এই উত্তরটি আপনাকে অনেক ধন্যবাদ, এটি একটি জীবন রক্ষাকারী। কেবল যোগ করার মতো বিষয় হ'ল docker events&যদি আপনার ধারকটি নিয়মিতভাবে এডাব্লুএস ইসিএস পরিষেবাদির মতো কিছু থেকে পুনরায় চালু করা হয় তবে সমস্যা হতে পারে। সুতরাং এই দৃশ্যে লগ ইন থেকে ধারক হেক্স আইডি পাওয়া সহজ হতে পারে /var/log/ecs/ecs-agent.log.<DATE>। তারপরে docker logs <hex id>কেন এই জিনিসগুলি বুট হচ্ছে না তা এই উত্তরের পরামর্শ অনুযায়ী ব্যবহার করুন ।
অ্যালেক্সকবি

1
@alexkb ধন্যবাদ! আমি আপনার পরামর্শটি উত্তরের শেষে যুক্ত করেছি যাতে অন্যরা এটি আরও সহজে খুঁজে পেতে পারে।
পিটার ল্যামবার্গ

18

এখন পর্যন্ত আমি যে সেরাটি খুঁজে পেয়েছি তা হ'ল:

#stop the current demon and start it in debug modus
sudo service docker stop
dockerd -D # --debug

খালি ক্লায়েন্টটি নতুন শেল থেকে শুরু করুন। ভ্রান্ত ধারণাটি ছিল যে ক্লায়েন্টটি আসলে কিছু করেন ... ভাল এটি কেবল ডেমনটির সাথে যোগাযোগ করছে, সুতরাং আপনি ক্লায়েন্টটি ডিবাগ করতে চান না তবে নিজেই ডিমনটি (সাধারণত)।


13

আমার ক্ষেত্রে, -a(এসটিডিআউট / এসটিডিআরআর সংযুক্ত) পতাকাটি যথেষ্ট ছিল:

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

এটি প্রারম্ভিক ত্রুটিটি দেখিয়েছিল (আমাদের ক্ষেত্রে এটি ব্যবহারের জন্য একটি অনুপস্থিত লগ পাথ supervisord)। আমি ধরে নিয়েছি বেশিরভাগ ধারক প্রারম্ভিক ত্রুটিগুলি এখানেও প্রদর্শিত হবে।


3

ডকার আউটপুট কীভাবে আরও সম্পূর্ণ তৈরি করা যায় সে সম্পর্কে আমি আপনার প্রশ্নের উত্তর দিতে পারছি না তবে আমি আপনাকে বলতে পারি যে .এস ফাইলটিতে একটি স্ট্রিং প্রতিস্থাপন ইন-প্লেস রেজেেক্স কিছুটা উন্মাদনা: স্ট্রিংটিতে কেবলমাত্র এত বেশি জায়গা বরাদ্দ করা হয়েছে, এবং আপনি যদি অন্য এন্ট্রিগুলির ফাইল অফসেট পরিবর্তন করেন তবে এলফ ফাইলটি দূষিত হয়ে যায়। কনটেইনারের বাইরে পার্ল কমান্ড ( LD_LIBRARY_PATH পরিবর্তনের আগে ) চালানোর পরে আপনার .so ফাইলটিতে অবজডাম্প বা রিডেলফ চালানোর চেষ্টা করুন - ডোনट्स ডলার এখন এটি দুর্নীতিগ্রস্থ।

দুঃখজনকভাবে প্রয়োজনীয় হ্যাকটিতে এটি কাজ করার কারণ হ'ল "টিএমপি" এবং "ইত্যাদি" একই স্ট্রিং দৈর্ঘ্যের তাই কোনও অফসেট পরিবর্তন হয় না। ডিরেক্টরি / ডি কেআর বা অনুরূপ বিবেচনা করুন যদি আপনি / টিএমপি ব্যবহার না করতে পছন্দ করেন।

আপনি যদি এই পদ্ধতির অবলম্বন করেন এবং আপনার পছন্দসই পাথগুলি অপরিবর্তনীয় হয় তবে গ্রন্থাগারটি পুনর্নির্মাণ করুন এবং উত্সে / ইত্যাদি / হোস্টের জন্য ডিফল্ট পাথ পরিবর্তন করুন। বা আরও ভাল, আপনার ডকার ধারক শুরু করার সময় আপনার পরিবর্তিত libnss_files.soনামটির মতো এটির মতো নামকরণ libnss_altfiles.soএবং nsswitch.confব্যবহারের পরিবর্তন করার hosts: altfilesসময় (ডকারের পাশাপাশি nsswitch.conf মাউন্ট করা না থাকে, তবে আপনি এটি পরিবর্তন করতে পারবেন না)। এটি আপনাকে বেস সিস্টেমে আপনার সাধারণ লাইব্রেরির সমান্তরালে libnss_altfiles.so রাখতে দেয়। যদি ডকার বাইস-মাউন্ট এনএসউইচ.কিনফ করে তবে আপনার / lib-override ডিরেক্টরিতে আপনার পুনর্নির্মাণ libnss_files.so একটি অনুলিপি এলডি_লিবিআরএইপিএইচডি দ্বারা লোড করার জন্য প্রস্তুত রাখুন।

শীর্ষস্থানীয় হিসাবে, স্যুইড / স্যাজিড বাইনারিগুলি এলডি_লিবিআরএআইপিএটিএইচ এবং এলডি_প্রেলয়েড উপেক্ষা করে, সুতরাং কিছু জিনিস ভঙ্গ হতে চলেছে (পড়ুন: আপনি যদি এই ভেরিয়েবলগুলি ব্যবহার করেন তবে ডিফল্ট / ইত্যাদি / হোস্ট ব্যবহার করে ফিরে যান)।


মহান অন্তর্দৃষ্টি জন্য অনেক ধন্যবাদ ... আমি খুব দ্রুত ছিলাম এবং এখন যা ঘটছে তা দেখুন। আমি এখনও জানি না কেন স্ট্যাটালটি কেনার জন্য একটি হোস্টকে সমাধান করতে হবে (এলএস-এল) যখন সরল ফাইল তালিকা (
এলএস

0

কখনও কখনও, আপনি ডকার ডেমন চলমান নোডে ছড়িয়ে দিয়ে এর পরে দরকারী ত্রুটি বার্তাগুলি খুঁজে পেতে পারেন:

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

ম্যাক ওএস-এর 'ডকার সম্প্রদায় সংস্করণ' এ, আপনি ডকারের ভিএম-তে সংযুক্ত হতে পারেন:

$  screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.