ডকার পাত্রে মারা যাওয়া একটি প্রধান প্রক্রিয়া কীভাবে তদন্ত করবেন?


13

কখনও কখনও আপনাকে একটি ধারক, যা থামানো হয়, বা একটি পাত্রে যা শুরু করার পরে খুব দ্রুত মারা যায় এবং থেমে যায় তা অনুসন্ধান করতে হয়।

docker exec -ti <id> bash কেবল চালানো পাত্রে কাজ করে, এটি শেষ হয়ে গেলে, ব্যাশ প্রম্পটটিও সমাপ্ত হয়।

সঙ্গে docker startআপনি কি অন্য কিছু কমান্ড সাপ্লাই করতে পারছে না, এবং যদি ধারক ডাইস হঠাৎ আবার আপনাকে ধারক ঢুকতে পারবে সময় নেই হবে এবং আপনার তদন্ত না।

আমরা docker commitআবার docker runনতুন চিত্রটিতে ভিন্ন কমান্ড সহ করতে পারি , তবে আমি ভাবছি যে অন্য কোনও বিকল্প আছে কিনা।

দ্রষ্টব্য : docker logsstdout / stderr এ মুদ্রিত অ্যাপসটি কেবল ফিরিয়ে দেয়। সমস্যাটি কী ছিল তা বোঝার জন্য এটি যথেষ্ট নাও হতে পারে।


কিছুক্ষণ ভাবার পরে: ডকার মূল প্রক্রিয়া ???? কেবলমাত্র একটি প্রক্রিয়া চালানোর উদ্দেশ্যে একটি ধারক হিসাবে, হয় 'মূল' শব্দটি মুছে ফেলা হবে, বা আপনি কিছু অদ্ভুত কিছু করছেন (যেমন কোনও init প্রক্রিয়া চালানো), বা আপনি প্রক্রিয়া হিসাবে থ্রেড নিচ্ছেন ... আমি মনে করি এটি বিকল্পটি একটি, তবে আমাকে এটি বলতে হয়েছিল কারণ এটি আমাকে বিরক্ত করে
টেনসিবাই

@ টেনসিবাই কখনও কখনও আপনাকে বোবা-থ্রির মতো কিছু চালাতে হয়, পিন 1 / সিগন্যালিং ইস্যুটি পাত্রে হ্যান্ডেল করতে হয়, যদি আপনার প্রধান কমান্ড নিজেই এটি পরিচালনা করতে না পারে। অন্যান্য ক্ষেত্রেও দেখা যেতে পারে যেখানে কোনও ডকারের ধারক একাধিক প্রক্রিয়া চালায়
SztupY

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

উত্তর:


9

লিনাক্সে কোনও প্রক্রিয়া কেন ব্যর্থ হয়েছিল তা ট্র্যাক করার সাধারণ উপায়গুলি। এরকম একটি উপায় ব্যবহার করে straceএমন একটি প্রক্রিয়া চালানো যা আপনাকে বলবে যে সিস্টেম কলগুলি প্রক্রিয়া করেছে এবং সাধারণত ব্যর্থতার কারণ দেখায়।

আপনি এর Dockerfileমতো দেখতে এমন একটি তৈরি করতে পারেন:

FROM original_image

RUN apt-get -y update && apt-get install -y strace

# build with `docker build -t debug_version`

তারপরে আপনার নতুন চিত্রটি ব্যবহার করে চালান docker run debug_version strace original_cmd

এমন প্রক্রিয়াগুলির জন্য যা শিশুদের কাঁটাচামচ করে (এবং তারপরে মারা যায়) আপনি বিকল্পটি straceদিয়ে চালাতে চান -ff। এছাড়াও আপনি ব্যবহার করে কিছু ফাইল ম্যাপ করতে পারেন Docker ডেটা ভলিউম এবং ব্যবহার -oথেকে বিকল্প straceএটি লিখতে। তবে সাধারনত straceস্টাডআউটে আউটপুট ছেড়ে যায় যা ব্যবহার করে পাঠযোগ্য docker log

সম্পর্কিত প্রশ্ন: লিনাক্স প্রক্রিয়া রহস্যজনকভাবে শেষ হয়


এর অর্থ আমার এখনও docker commitথামার
ধারকটির

আপনি বলেছিলেন এটি শুরুতেই মারা যায়। আমি ধরে নিলাম আপনার তখন একটি চিত্র আছে। যা বন্ধ হয়ে গেছে তাদের ক্ষেত্রে হ্যাঁ একটি প্রতিশ্রুতিবদ্ধ হওয়া আবশ্যক।
ইভজেনি

থামানো ধারক পাওয়ার জন্য
এটির মধ্যে একমাত্র দৃশ্য

straceআলপাইন লিনাক্সের জন্যও রয়েছে একটি প্যাকেজ , pkgs.lpinelinux.org/package/edge/main/x86_64/strace । এটি ইনস্টল করতে আলপাইন প্যাকেজ ম্যানেজার ব্যবহার করুন apk install strace,।
ইভজেনি

3

আমি যতদূর অবগত, commitএবং runকনটেইনারটি মারা যাওয়ার সময় যেমন ছিল তেমন আপনাকে সম্পূর্ণ অ্যাক্সেস দেওয়ার জন্য এখানে সেরা বিকল্প are

আদর্শভাবে, আপনার ধারকটি ব্যর্থ হয়ে গেলে আরও কিছু দরকারী তথ্য ছড়িয়ে দেবে, তবে এটি সামগ্রিকভাবে অন্য বিষয়।

সম্পাদনা:, আমার উত্তর প্রসারিত করতে যদি ধারক অধিকার শুরু মারা যাচ্ছে, এছাড়াও আপনি ব্যবহার করতে পারেন docker runএকটি বিকল্প নির্দিষ্ট করার --entrypointএবং CMD। সাধারণত আমি এটিকে একটি লুপ বা এমন কিছুতে সেট করব যা তার নিজের থেকে বের হবে না। একবার আপনি ধারক হয়ে গেলে, আপনি ব্যর্থ হওয়া পদক্ষেপগুলি ম্যানুয়ালি চালাতে পারেন এবং তারপরে ধারকটি বেরিয়ে যাওয়ার বিষয়ে চিন্তা না করেই ফলাফলটি পরীক্ষা করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.