क्या किसी भी तरह से मैं एक कंटेनर के लॉग को देख सकता हूं जो बाहर निकल गया है?
मैं बाहर निकलने वाले कंटेनर की कंटेनर आईडी का उपयोग कर सकता docker ps -aहूं, लेकिन मैं जानना चाहता हूं कि जब यह चल रहा था तो क्या हुआ।
क्या किसी भी तरह से मैं एक कंटेनर के लॉग को देख सकता हूं जो बाहर निकल गया है?
मैं बाहर निकलने वाले कंटेनर की कंटेनर आईडी का उपयोग कर सकता docker ps -aहूं, लेकिन मैं जानना चाहता हूं कि जब यह चल रहा था तो क्या हुआ।
जवाबों:
का उपयोग करें docker logs। यह बंद कंटेनरों के लिए भी काम करता है और कंटेनर की मुख्य प्रक्रिया के पूरे STDOUT और STDERR धाराओं को पकड़ता है:
$ docker run -d --name test debian echo "Hello World"
02a279c37d5533ecde76976d7f9d1ca986b5e3ec03fac31a38e3dbed5ea65def
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
49daa9d41a24 debian "echo test" 2 minutes ago Exited (0) 2 minutes ago test
$ docker logs -t test
2016-04-16T15:47:58.988748693Z Hello World
stack=s1 && c=$(task_id=$(docker stack ps "$stack" --filter desired-state=shutdown | tail -n +2 | head -n 1 | awk '{print $1}') && docker inspect --format '{{.Status.ContainerStatus.ContainerID}}' "$task_id") && docker logs "$c"कमांड की शुरुआत में स्टैक नाम निर्दिष्ट किया गया है।
docker logs --tail=50 <container id> अंतिम पचास पंक्तियों के लिए - उपयोगी जब आपका कंटेनर लंबे समय से चल रहा हो।
सीधे बाहर निकलने वाले कंटेनर के लॉगफाइल को कम देखने के लिए, फ़ाइल के अंत तक स्क्रॉल किया गया, मैं उपयोग करता हूं:
docker inspect $1 | grep 'LogPath' | sed -n "s/^.*\(\/var.*\)\",$/\1/p" | xargs sudo less +G
./viewLogs.sh CONTAINERNAME के रूप में चलाएं
इस पद्धति में docker logsआधारित दृष्टिकोणों से अधिक लाभ है , कि स्ट्रीम के बजाय फ़ाइल को सीधे खोला जाता है।
sudo आवश्यक है, क्योंकि LogPath / फ़ाइल आमतौर पर रूट के स्वामित्व में है