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


17

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

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

docker --version
Docker version 1.10.1, build 9e83765
docker pull ubuntu
docker run --name u1 -dit ubuntu:latest
docker export -o exported u1
docker stop u1
docker rm u1
docker import exported ubuntu:imported
docker run --name u1 -dit ubuntu:imported
docker: Error response from daemon: No command specified.

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

जवाबों:


18

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

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

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

2
आप docker inspect imagename:tagnameमूल और कि आयातित की तुलना कर सकते हैं । मेरे पास import/ exportऔर के साथ कोई भाग्य नहीं था --change, हालांकि सब कुछ save/ के साथ ठीक काम करता है load
कानकैम

2

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

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

निर्यात और आयात करने की आज्ञा देता है:

docker export --output "C:\Users\oscar\Desktop\sqlTestMS.tar" msSQL

docker import "C:\Users\oscar\Desktop\sqlTestMS.tar" mssql

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

docker ps

यहाँ छवि विवरण दर्ज करें

वहाँ से हम यह पता लगा सकते हैं कि सही कमांड को कैसे चलाना है:

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

1

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

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


मैं केवल मूल समस्या के समाधान में प्रविष्टि में ओवरराइड कर रहा हूं। निर्यात / आयात के दौरान कुछ भी ओवरराइड नहीं किया जाता है।
ग्रीन्के

हाय @ मेरा जवाब अभी-अभी अपडेट हुआ। जब आप एक कंटेनर का निर्यात करते हैं तो मैं अन्वेषण करता हूं।
pmoksuz

0

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

  1. निम्न प्रकार से Dockerfile बनाएं:

    FROM ubuntu:imported
    ENTRYPOINT bash
    
  2. नई छवि बनाएँ:

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

    docker run --name u1 -dit ubuntu:importedwithdockerfile
    

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


-1

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


1
इस मामले में "संग्रह" फ़ाइल क्या है और इसे कैसे बनाएं?
ग्रीनेके

2
@Greendrake docker loadऔर docker saveकंटेनर छवियों (जिसमें से कंटेनर बनाई गई हैं) पर काम करते हैं, जबकि docker importऔर docker exportकंटेनरों पर कार्य करते हैं।
माइकल हैम्पटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.