2015-05-30 13 views
14

समाप्त होने पर मुझे वाणिज्य दूत के healthcheck सुविधा का उपयोग कर रहा हूँ, और मैं इन इन "मृत" कंटेनर बार आ रही है:डोकर कंटेनर

CONTAINER ID IMAGE     COMMAND    CREATED   STATUS    PORTS                                         NAMES 
20fd397ba638 progrium/consul:latest "\"/bin/bash -c 'cur 15 minutes ago Dead 

क्या वास्तव में एक "डेड" कंटेनर है? एक बंद कंटेनर कब "मृत" बन जाता है?

रिकॉर्ड के लिए, मैं स्वास्थ्य जांच करने के लिए प्रोजेरियम/कंसुल + ग्लाइडरलैब्स/रजिस्ट्रार छवियों + SERVICE_XXXX_CHECK env चर चलाता हूं। यह प्रत्येक एक्स सेकेंड की छवि चलाने वाली एक हेल्थ चेक स्क्रिप्ट चलाता है, docker run --rm my/img healthcheck.sh

मुझे सामान्य रूप से रुचि है कि "मृत" का अर्थ क्या है और इसे कैसे होने से रोकें। एक और अनोखी बात यह है कि मेरे मृत कंटेनरों का कोई नाम नहीं है।

"State": { 
     "Dead": true, 
     "Error": "", 
     "ExitCode": 1, 
     "FinishedAt": "2015-05-30T19:00:01.814291614Z", 
     "OOMKilled": false, 
     "Paused": false, 
     "Pid": 0, 
     "Restarting": false, 
     "Running": false, 
     "StartedAt": "2015-05-30T18:59:51.739464262Z" 
    }, 

अजीब बात यह है कि केवल हर अब और फिर एक कंटेनर मृत हो जाता है और नहीं हटाया जाता है है:

इस

कंटेनर निरीक्षण से कुछ जानकारी है।

धन्यवाद

संपादित करें: लॉग को देखते हुए, मैंने पाया क्या कंटेनर बंद असफल बनाता है:

Handler for DELETE /containers/{name:.*} returned error: Cannot destroy container 003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc: 
Driver aufs failed to remove root filesystem 003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc: 
rename /var/lib/docker/aufs/diff/003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc 
/var/lib/docker/aufs/ diff/003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc-removing: 
device or resource busy 

इस क्यों होता है?

EDIT2: पाया इस: https://github.com/docker/docker/issues/9665

+0

मैंने अपना जवाब संपादित किया है: समस्या 965 अभी बंद कर दी गई है। – VonC

+0

शानदार, धन्यवाद –

उत्तर

14

अद्यतन मार्च 2016: issue 9665 बस (संभवतः डोकर 1.11 के लिए) PR 21107 द्वारा बंद कर दिया गया
मदद करनी चाहिए कि बचने "ड्राइवर aufs जड़ फाइल सिस्टम को दूर करने में विफल रहा है", " डिवाइस या संसाधन व्यस्त "समस्या।


मूल जवाब मई 2015

मृत अगर container states है, जो आदेश है कि कंटेनर को पुन: प्रारंभ किया जाना है को रोकने के लिए, Container.Start()

if container.removalInProgress || container.Dead { 
     return fmt.Errorf("Container is marked for removal and cannot be started.") 
} 

यह set Dead when stopping fails है द्वारा परीक्षण किया जाता है।

विफलता के संभावित कारण के बीच, see container.Kill()
इसका मतलब है kill -15 और kill -9 दोनों विफल रहे हैं।

// 1. Send a SIGTERM 
if err := container.killPossiblyDeadProcess(15); err != nil { 
    logrus.Infof("Failed to send SIGTERM to the process, force killing") 
    if err := container.killPossiblyDeadProcess(9); err != nil { 

आमतौर पर ओपी का उल्लेख है, एक व्यस्त डिवाइस या संसाधन, प्रक्रिया को मारने से रोकने के लिए।

+0

कोड को देखते हुए, मैं लॉग की तलाश में गया, और मुझे कुछ मिला। मैंने अभी मुख्य प्रश्न –

+0

@ ट्रस्टनोओ वास्तव में संपादित किया है। मैंने उस कोड का हिस्सा जोड़ा है जो हत्या संकेतों को भेजने का प्रयास करता है। – VonC

+1

ठीक है, मुझे लगता है कि अभी तक इस "डिवाइस व्यस्त" समस्या का कोई समाधान नहीं है, टिकट अभी भी खुला और सक्रिय है। मैं देखूंगा कि किसी और के पास कुछ कहना है और फिर अपना जवाब स्वीकार करें क्योंकि यह मूल रूप से बताता है कि "मृत" क्या है। –

संबंधित मुद्दे