"لا يوجد أمر محدد" من صورة/حاوية عامل الميناء المعاد استيرادها

أحاول أخذ حاوية عامل ميناء من جهاز واحد وتشغيلها على جهاز آخر ومواجهة هذا الخطأ: "استجابة خطأ من البرنامج الخفي: لا يوجد أمر محدد".

يوجد أدناه مثال مبسط يوضح المشكلة:

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

عند تصدير حاوية فقدت التاريخ الخاص الذي يحتوي على طبقات الصورة والبيانات الوصفية. لذلك فقدت الحاوية الخاصة بك دول بيد.

يجب أن يكون لكل حاوية عملية أولية (جذر). كنت أوفيردينغ إنتريبوانت الافتراضي على دوكيرفيل كما باش. [تحرير] أعتقد حتى أنك لا تجاوز يستخدم الافتراضي ، لم يتم تعريفها في صورة قاعدة أوبونتو. لذلك يجب أن تبدأ العملية الأولية الخاصة بك مع الأمر سمد. أعتقد أنه لا يوجد خلل. بل هو ميزة دوكيرفيل لإعادة الاستخدام.

إذا كنت تستخدم 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. إنشاء دوكيرفيل على النحو التالي:

    FROM ubuntu:importedENTRYPOINT bash
  2. بناء صورة جديدة:

    docker build -t ubuntu:importedwithdockerfile .
  3. الآن سيتم تشغيله:

    docker run --name u1 -dit ubuntu:importedwithdockerfile

ومع ذلك ، لا يزال من غير الواضح لماذا لا تعمل الصورة التي تم تصديرها ثم استيرادها على الفور. هل هذا خطأ?