আমি docker logs [container-name]একটি নির্দিষ্ট ধারকের লগগুলি দেখতে ব্যবহার করি ।
এই লগগুলি সাফ করার জন্য কি কোনও দুর্দান্ত উপায় আছে?
আমি docker logs [container-name]একটি নির্দিষ্ট ধারকের লগগুলি দেখতে ব্যবহার করি ।
এই লগগুলি সাফ করার জন্য কি কোনও দুর্দান্ত উপায় আছে?
উত্তর:
এই প্রশ্ন থেকে একটি ওয়ান লাইনার রয়েছে যা আপনি চালাতে পারেন:
echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
বা অনুরূপ কাটা কমান্ড আছে:
truncate -s 0 $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
তারা ডকারের ফাইলগুলি সরাসরি সংশোধন করে যেহেতু আমি তাদের কারও মধ্যে বড় ভক্ত নই। বহিরাগত লগ মুছে ফেলার সময় ঘটতে পারে যখন ডকার ফাইলটিতে জসন ফর্ম্যাট করা ডেটা লিখছেন, ফলে একটি আংশিক লাইন তৈরি হয় এবং docker logsক্লিমে থেকে কোনও লগ পড়ার ক্ষমতা ভঙ্গ করে ।
পরিবর্তে, আপনি ডকার আপনার জন্য লগগুলি স্বয়ংক্রিয়ভাবে ঘোরান। আপনি যদি ডিফল্ট JSON লগিং ড্রাইভার ব্যবহার করে থাকেন তবে ডকার্ড করার জন্য এটি অতিরিক্ত পতাকাগুলির সাথে সম্পন্ন করা হয় :
dockerd ... --log-opt max-size=10m --log-opt max-file=3
আপনি এটি আপনার স্টার্টআপ স্ক্রিপ্টগুলি পরিবর্তনের পরিবর্তে আপনার ডেমন.জেসন ফাইলের অংশ হিসাবে সেট করতে পারেন :
{
"log-driver": "json-file",
"log-opts": {"max-size": "10m", "max-file": "3"}
}
এই বিকল্পগুলি রুট অ্যাক্সেসের সাথে কনফিগার করা দরকার। systemctl reload dockerসেটিংস প্রয়োগ করতে এই ফাইলটি পরিবর্তন করার পরে একটি চালানো নিশ্চিত করুন । এই সেটিংটি নতুন যে কোনও তৈরি পাত্রের জন্য পূর্বনির্ধারিত হবে। দ্রষ্টব্য, নতুন লগ সীমা পাওয়ার জন্য বিদ্যমান পাত্রে মুছে ফেলা এবং পুনরায় তৈরি করা দরকার।
এই ডিফল্টগুলিকে ওভাররাইড করার জন্য অনুরূপ লগ বিকল্পগুলি পৃথক পাত্রে পাস করা যেতে পারে, আপনাকে পৃথক ধারকগুলিতে কম বা কম লগ সংরক্ষণ করতে দেয়। এর থেকে docker runদেখতে:
docker run --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 ...
বা একটি রচনা ফাইলের মধ্যে:
version: '3.7'
services:
app:
image: ...
logging:
options:
max-size: "10m"
max-file: "3"
অতিরিক্ত স্থান সাশ্রয়ের জন্য, আপনি জসন লগ ড্রাইভার থেকে "স্থানীয়" লগ ড্রাইভারে স্যুইচ করতে পারেন। এটি একই সর্বোচ্চ-আকার এবং সর্বাধিক-ফাইলের বিকল্পগুলি নেয়, তবে জসনগুলিতে সঞ্চয় করার পরিবর্তে এটি একটি বাইনারি সিনট্যাক্স ব্যবহার করে যা দ্রুত এবং ছোট। এটি আপনাকে একই আকারের ফাইলে আরও বেশি লগ সংরক্ষণ করতে দেয়। এর জন্য ডেমন.জসন এন্ট্রি দেখতে দেখতে:
{
"log-driver": "local",
"log-opts": {"max-size": "10m", "max-file": "3"}
}
স্থানীয় ড্রাইভারের সর্বনিম্নতা হ'ল বহিরাগত লগ পার্সার / ফরোয়ার্ডারগুলি যা জসন লগগুলিতে সরাসরি অ্যাক্সেসের উপর নির্ভর করে আর কাজ করবে না। সুতরাং আপনি যদি ইলাস্টিক, বা স্প্লঙ্কের সার্বজনীন ফরোয়ার্ডারে ফাইলব্যাট প্রেরণের জন্য কোনও সরঞ্জাম ব্যবহার করেন তবে আমি "স্থানীয়" ড্রাইভারটি এড়াতে চাই।
আমার টিপস এবং ট্রিকস উপস্থাপনায় আমি এটিতে আরও কিছুটা পেয়েছি ।
service docker restart নিজে থেকে একটি কাজ করেছি যা কাজ করে না। এটি কার্যকর হওয়ার আগে নতুন কনটেইনার তৈরি করতে হয়েছিল। অর্থাত্ কেবল পুরানো পাত্রে আনতে নতুন লগিং প্রয়োগ হয়নি
echo -n > ...। যাইহোক, আমি আমার লগগুলিতে আরও নিয়ন্ত্রণ রাখতে সক্ষম হতে চাই। উদাহরণস্বরূপ, ডকার-রচনা পুনরায় আরম্ভ করার পরে , আমি সংরক্ষিত লগগুলির সাথে কিছু করার জন্য প্রক্রিয়াটি পছন্দ করতে চাই।
ব্যবহার করুন:
truncate -s 0 /var/lib/docker/containers/*/*-json.log
আপনার সুডোর দরকার হতে পারে
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
সুত্র। জেফ এস ডকার পাত্রে সঠিকভাবে লগগুলি কীভাবে সাফ করবেন?
তথ্যসূত্র: কোনও ফাইল ব্যবহার করার সময় এটি কাটা হচ্ছে (লিনাক্স)
containersঅন্যথায় লিখিত সামগ্রী উপলব্ধ নেই।
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"- আমার জন্য কাজ করেছে
error from daemon in stream: Error grabbing logs: invalid character '\x00' looking for beginning of value
উইন্ডোজ এবং ম্যাক এবং সম্ভবত অন্যদের জন্য ডকারে, লেজের বিকল্পটি ব্যবহার করা সম্ভব। উদাহরণ স্বরূপ:
docker logs -f --tail 100
এইভাবে, কেবলমাত্র সর্বশেষ 100 টি লাইন দেখানো হয়েছে এবং আপনার 1 এম লাইনগুলির মধ্যে প্রথম স্ক্রোল করতে হবে না ...
(এবং এইভাবে, লগটি মুছে ফেলা সম্ভবত অপ্রয়োজনীয়)
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
sudo sh -c "du -ch /var/lib/docker/containers/*/*-json.log", কেবল লগের আকারের মোট পেতেsudo sh -c "du -ch /var/lib/docker/containers/*/*-json.log | grep total"
আপনি পর্যায়ক্রমে লগগুলি সাফ করতে লোগ্রোটেট সেট আপ করতে পারেন।
/Etc/logrotate.d/docker-logs এ ফাইলের উদাহরণ
/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
size=50M
missingok
delaycompress
copytruncate
}
docker run? ফাইল /etc/logrotate.d/docker-logsবিদ্যমান নেই, আমি এটি তৈরি করতে হবে?
"log-opts"যেমনটি বিএমইচ দেখিয়েছে)
ডকার 4 ম্যাক, একটি 2018 সমাধান:
LOGPATH=$(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
docker run -it --rm --privileged --pid=host alpine:latest nsenter -t 1 -m -u -n -i -- truncate -s0 $LOGPATH
প্রথম লাইনটি গৃহীত উত্তরের মতো লগ ফাইলের পাথ পায়।
দ্বিতীয় লাইনটি আপনাকে ব্যবহার করে nsenterযা আপনাকে xhyveভিএম-তে কমান্ড চালানোর অনুমতি দেয় যা ডকার 4 ম্যাকের অধীনে সমস্ত ডকার পাত্রে হোস্ট হিসাবে সার্ভার করে। আমরা যে কমান্ডটি চালাচ্ছি তা হ'ল truncate -s0 $LOGPATHনন-ম্যাক উত্তরগুলি থেকে পরিচিত ।
আপনি যদি ব্যবহার করেন docker-composeতবে প্রথম লাইনটি হয়ে যায়:
local LOGPATH=$(docker inspect --format='{{.LogPath}}' $(docker-compose ps -q <service>))
এবং <service>আপনার docker-compose.ymlফাইল থেকে পরিষেবা নাম ।
কৌতুকের জন্য https://github.com/justincormack/nsenter1 ধন্যবাদ nsenter।
docker run -it --rm --privileged --pid=host alpine:latest nsenter -t 1 -m -u -n -i -- sh -c 'truncate -s0 /var/lib/docker/containers/*/*-json.log'
আপনি সরাসরি ডকার কমান্ডের মাধ্যমে এটি করতে পারবেন না।
আপনি হয় লগের আকার সীমাবদ্ধ করতে পারেন, বা কোনও ধারক সম্পর্কিত লগগুলি মুছতে স্ক্রিপ্ট ব্যবহার করতে পারেন। আপনি এখানে স্ক্রিপ্ট উদাহরণ খুঁজে পেতে পারেন (নীচে থেকে পড়ুন): বৈশিষ্ট্য: লগের ইতিহাস সাফ করার ক্ষমতা # 1083
ডকার-রচনা ফাইলের রেফারেন্সের লগিং বিভাগটি পরীক্ষা করে দেখুন , যেখানে আপনি কিছু লগিং ড্রাইভারের জন্য বিকল্পগুলি (যেমন লগ রোটেশন এবং লগের আকার সীমা) নির্দিষ্ট করতে পারেন।
মূল ব্যবহারকারী হিসাবে নিম্নলিখিতগুলি চালনার চেষ্টা করুন:
> /var/lib/docker/containers/*/*-json.log
অথবা
cat /dev/null > /var/lib/docker/containers/*/*-json.log
অথবা
echo "" > /var/lib/docker/containers/*/*-json.log
আমি এটিকে পছন্দ করি (উপরের সমাধানগুলি থেকে):
truncate -s 0 /var/lib/docker/containers/*/*-json.log
তবে আমি বেশ কয়েকটি সিস্টেম চালাচ্ছি (উদাহরণস্বরূপ উবুন্টু 18.x বায়োনিক), যেখানে এই পথটি প্রত্যাশার মতো কাজ করে না। ডকার স্ন্যাপের মাধ্যমে ইনস্টল করা হয়েছে, সুতরাং ধারকগুলির পথটি আরও ভালো:
truncate -s 0 /var/snap/docker/common/var-lib-docker/containers/*/*-json.log
আপনি docker runকমান্ড লাইনে লগ-অপ্টস প্যারামিটারগুলি সরবরাহ করতে পারেন :
docker run --log-opt max-size=10m --log-opt max-file=5 my-app:latest
বা এই মত একটি ডকার-রচনা। জিম
my-app:
image: my-app:latest
logging:
driver: "json-file"
options:
max-file: "5"
max-size: 10m
ক্রেডিট: https://medium.com/@Quigley_Ja/rotating-docker-logs-keeping-your-overlay-folder-small-40cfa2155412 (জেমস Quigley)
"5"এবং "10m"যথাক্রমে), হিসাবে দেখানো এখানে বিশ্বব্যাপী daemon.json ফাইলের জন্য, কিন্তু এটা একটা Docker-compose.yml জন্য একই। উভয় ক্ষেত্রেই এটি কেবল নতুন তৈরি পাত্রে প্রভাব ফেলবে।
"5"এটি কাজ করে। 10mপ্রকৃতপক্ষে উদ্ধৃত ছাড়া হবে।
ম্যাক ব্যবহারকারীদের জন্য ডকার, সমাধান এখানে:
এর মাধ্যমে লগ ফাইলের সন্ধান করুন:
$ docker inspect | grep log
ডকার মেশিনে এসএসএইচ (ধরুন নামটি defaultযদি না হয় তবে তা docker-machine lsখুঁজে বের করার জন্য দৌড় দিন ):
$ docker-machine ssh default
রুট ব্যবহারকারী ( রেফারেন্স ) এ পরিবর্তন করুন :
$ sudo -i
লগ ফাইলের সামগ্রী মুছুন:
$ echo "" > log_file_path_from_step1
docker exec -it default shকোনও পাত্রে একটি শেল শেল প্রবেশ করতে ব্যবহার করতে পারেন । তবে অনেকগুলি ধারক স্পষ্টভাবে sudoকমান্ডটি উপলব্ধ করে না।
sudo sh -c "du -ch /var/lib/docker/containers/*/*-json.log"