यहां एक समाधान है जब डॉकटर कंटेनर सामान्य रूप से बाहर निकलता है और आप डॉकरफाइल को संपादित कर सकते हैं।
आम तौर पर, जब एक डॉकटर कंटेनर चलाया जाता है, तो एक कमांड चलाकर एक एप्लिकेशन दिया जाता है। से Dockerfile संदर्भ ,
CMD और ENTRYPOINT निर्देश दोनों परिभाषित करते हैं कि कंटेनर चलाते समय कौन सी कमांड निष्पादित होती है। ... Dockerfile को कम से कम CMD या ENTRYPOINT कमांड निर्दिष्ट करना चाहिए।
जब आप एक छवि बनाते हैं और CMD या ENTRYPOINT के साथ कोई कमांड निर्दिष्ट नहीं करते हैं, तो आधार छवि के CMD या ENTRYPOINT कमांड को निष्पादित किया जाएगा।
उदाहरण के लिए, आधिकारिक Ubuntu Dockerfile में CMD ["/bin/bash"]( https://hub.docker.com/_/ubuntu ) है। अब, bin/bash/कमांड इनपुट स्वीकार कर सकता है और docker run -it IMAGE_IDकमांड कंटेनर में STDIN संलग्न करता है। नतीजा यह है कि आपको एक इंटरैक्टिव टर्मिनल मिलता है और कंटेनर चलता रहता है।
जब सीएमडी या एनटीआरपीओपीएनटी के साथ एक आदेश डॉकफाइल में निर्दिष्ट किया जाता है, तो कंटेनर चलाते समय इस कमांड को निष्पादित किया जाता है। अब, यदि यह कमांड बिना किसी इनपुट की आवश्यकता के पूरा हो सकता है, तो यह समाप्त हो जाएगा और कंटेनर बाहर निकल जाएगा। docker run -it IMAGE_IDहोगा नहीं इस मामले में इंटरैक्टिव टर्मिनल प्रदान करते हैं। एक उदाहरण नीचे Dockerfile से निर्मित docker की छवि होगी-
FROM ubuntu
ENTRYPOINT echo hello
यदि आपको इस छवि के टर्मिनल पर जाने की आवश्यकता है, तो आपको एंट्रीपॉइंट कमांड को संशोधित करके कंटेनर को चालू रखना होगा।
FROM ubuntu
ENTRYPOINT echo hello && sleep infinity
कंटेनर को सामान्य रूप से चलाने के बाद docker run IMAGE_ID, आप बस दूसरे टर्मिनल पर जा सकते हैं और docker exec -it CONTAINER_ID bashकंटेनर के टर्मिनल को प्राप्त करने के लिए उपयोग कर सकते हैं।