पुन: आयातित डॉकर छवि/कंटेनर से "कोई कमांड निर्दिष्ट नहीं"

मैं एक मशीन से एक डॉकर कंटेनर लेने की कोशिश कर रहा हूं और इसे दूसरे पर चला रहा हूं और इस त्रुटि का सामना कर रहा हूं: "डेमॉन से त्रुटि प्रतिक्रिया: कोई आदेश निर्दिष्ट नहीं है".

नीचे एक सरलीकृत उदाहरण है जो समस्या दिखा रहा है:

docker --versionDocker version 1.10.1, build 9e83765docker pull ubuntudocker run --name u1 -dit ubuntu:latestdocker export -o exported u1docker stop u1docker rm u1docker import exported ubuntu:importeddocker run --name u1 -dit ubuntu:importeddocker: Error response from daemon: No command specified.

उस उदाहरण में, हम पहले एक छवि (उबंटू) खींचते हैं और सफलतापूर्वक कंटेनर बनाते/चलाते हैं u1 इससे । फिर हम उस कंटेनर को एक फ़ाइल में निर्यात करते हैं (exported), कंटेनर को रोकें / निकालें, फ़ाइल को एक नई छवि में आयात करें (ubuntu:imported) और इससे एक नया कंटेनर चलाने का प्रयास करें । यह विफल रहता है ।

docker export कंटेनर के बारे में सब कुछ निर्यात नहीं करता है — बस फाइल सिस्टम । इसलिए, डंप को एक नई डॉकर छवि में वापस आयात करते समय, संदर्भ को फिर से बनाने के लिए अतिरिक्त झंडे निर्दिष्ट करने की आवश्यकता होती है ।

उदाहरण के लिए, यदि मूल कंटेनर ठीक चल रहा था क्योंकि डॉकरफाइल जिसका उपयोग इसकी छवि बनाने के लिए किया गया था CMD ["/usr/bin/supervisord"] इसमें, फिर अपने डंप को इस तरह आयात करें:

docker import \--change 'CMD ["/usr/bin/supervisord"]' \path/to/dump.tar imagename:tagname

आप उपयोग कर सकते हैं docker load संग्रह फ़ाइल से छवियों को लोड करने का आदेश । यह कमांड इमेज फाइल और आर्ग्स को एक साथ इंपोर्ट करेगा ।

डॉकर को निर्यात और आयात करने का प्रयास करते समय यह त्रुटि मिली microsoft/mssql-server-linux.

https://hub.docker.com/r/microsoft/mssql-server-linux/

निर्यात और आयात करने के आदेश:

docker export --output "C:\Users\oscar\Desktop\sqlTestMS.tar" msSQLdocker import "C:\Users\oscar\Desktop\sqlTestMS.tar" mssql

हालाँकि हमें इसे चलाने का आदेश नहीं मिला । समाधान निर्यात मशीन पर सभी कंटेनरों को सूचीबद्ध कर रहा था और कमांड को देख रहा था ।

docker ps

enter image description here

वहां से हम पता लगा सकते हैं कि सही कमांड कैसे चलाया जाए:

docker run --name msSQL -p 1401:1433 -d mssql:latest /opt/mssql/bin/sqlservr

जब आप एक कंटेनर निर्यात करते हैं तो यह अपना इतिहास खो देता है जिसमें छवि परतें और मेटा डेटा होता है । तो आपके कंटेनर ने अपने पीआईडी राज्यों को खो दिया ।

प्रत्येक कंटेनर में एक प्रारंभिक (रूट) प्रक्रिया होनी चाहिए । आप कर रहे हैं overiding डिफ़ॉल्ट entrypoint पर dockerfile के रूप में पार्टी की योजना बनाई. [संपादित] मुझे लगता है कि आप भी ओवरराइड नहीं करते हैं यह डिफ़ॉल्ट का उपयोग करता है , उबंटू बेस छवि में परिभाषित नहीं है । तो आपको सीएमडी कमांड के साथ अपनी प्रारंभिक प्रक्रिया शुरू करनी चाहिए । मुझे लगता है कोई बग नहीं है । यह एक dockerfile सुविधा के लिए reusablity.

यदि उपयोग कर रहे हैं import

docker save nginx:alpine | ssh rmeote-host docker import -sha256:f6098fc18511abbbfe9e52ed0d0ccc1fbe4f7b018ee1cd85392999aa92ebba1b# we see errorsdocker container run -d -p 2020:80  nginx:alpinedocker: Error response from daemon: No command specified.See 'docker run --help'.

यदि उपयोग कर रहे हैं load

docker save nginx:alpine | ssh remote-host "cat - | docker load"Loaded image: nginx:alpinedocker container run --name nginx -dp 2020:80 nginx:alpine7cc8836bef1e276f8aa986a09186e9e227542be3b094b082b9ab1f6d3c290a99docker psCONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS        PORTS                                   NAMES7cc8836bef1e   nginx:alpine   "/docker-entrypoint.…"   2 seconds ago   Up 1 second   0.0.0.0:2020->80/tcp, :::2020->80/tcp   nginx

यह इन अतिरिक्त चरणों के साथ काम कर रहा है:

  1. बनाने Dockerfile इस प्रकार के रूप:

    FROM ubuntu:importedENTRYPOINT bash
  2. नई छवि बनाएं:

    docker build -t ubuntu:importedwithdockerfile .
  3. अब यह चलेगा:

    docker run --name u1 -dit ubuntu:importedwithdockerfile

हालांकि, यह अभी भी स्पष्ट नहीं है कि बस निर्यात और फिर आयातित छवि तुरंत काम क्यों नहीं करती है । क्या यह एक बग है?