عامل الميناء تحويل حجم مجهول إلى حجم اسمه

لقد جربت صورة عامل ميناء باستخدام سطر الأوامر عامل ميناء دون تحديد أسماء وحدات التخزين. الآن وجدت أنني أريد الاستمرار في استخدام هذه الحاوية / الصورة ولكن عن طريق تحديد الحاوية في إنشاء عامل الميناء.

ما هو أفضل الممارسات للحفاظ على البيانات من وحدات التخزين المجهولة/غير المسماة واستخدامها في الحاوية الجديدة التي تم إنشاؤها بواسطة عامل الميناء يؤلف?

  • هل يمكنني بطريقة ما تحويل المجهول إلى مجلدات مسماة?
  • أو ينبغي إنشاء حاوية جديدة مع عامل الميناء يؤلف مع وحدات التخزين المسماة ونسخ البيانات?
  • أو أي خيار آخر?

لتلخيص الحل البديل:

docker volume create --name <new_volume>docker run --rm -it -v <old_volume>:/from:ro -v <new_volume>:/to alpine \    ash -c "cd /from ; cp -av . /to"docker volume rm <old_volume>

هذه الطريقة لها فائدة استخدام واجهة برمجة تطبيقات عامل الميناء. ويستخدم صورة لينكس خفيفة الوزن تسمى alpine وقذيفة الافتراضية, ash لتشغيل نسخة الملف, cp -av من المجلد القديم إلى المجلد المسمى حديثا.

لا يمكنك حاليا إعادة تسمية وحدات التخزين الموجودة. (هذا صحيح سواء تم تسميتهم سابقا أو لم يتم تسميتهم وتم إنشاء أسمائهم تلقائيا.)

يمكنك ان ترى هذه المسألة لمزيد من المعلومات حول تنفيذ هذه الميزة ، بالإضافة إلى إضافة "+1"/"ممتاز" للسماح للمطورين بمعرفة أنك تريدها.

بدون ذلك ، على حد علمي ، فإن الطريقة الجيدة الوحيدة للقيام بذلك هي إنشاء وحدة التخزين المسماة الجديدة ونسخ البيانات.

الجواب سيففان لم تنجح بالنسبة لي كما هو ، لذلك أنا نشر حل بلدي هنا:

docker run --rm --volumes-from <container_name> -v <new_volume_name>:/to ubuntu bash -c "cd <source_dir>; cp -r . <dest_dir>/."

هذا نسخ محتويات source_dir في الحاوية مع container_name إلى dest_dir ضمن المجلد الجديد new_volume_name.

للتحقق من أنه يعمل ، يمكنك سرد محتويات dest_dir مع:

docker run --rm -i -v <new_colume_name>:/tmp ubuntu find /tmp

في وقت كتابة هذا التقرير ، كان الخيار الوحيد هو نسخ البيانات. قد تختلف التفاصيل اعتمادا على الإعداد الخاص بك. القائمة العامة للخطوات التي يتعين القيام بها هي كما يلي:

  1. قم بإيقاف الحاوية المصدر وإزالتها للسماح بإنشاء وحدة التخزين الجديدة في الخطوة 3.

    docker stop NAMEdocker rm NAME# ordocker-compose stop SERVICEdocker-compose rm SERVICE

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

    في بعض الحالات ، لا تكون هناك حاجة إليها حقا ، على سبيل المثال عند التبديل من الحاويات المستقلة إلى docker-compose.

  2. التغيير docker-compose.yml إذا كان ذلك ممكنا.

  3. ابدأ الحاوية الجديدة لوحدة التخزين الجديدة المراد إنشاؤها.

    حاويات مستقلة:

    docker run ...# ordocker-compose up -d
  4. أوقف الحاوية الجديدة لتجنب تغيير البيانات.

    docker stop ...# ordocker-compose stop

    في حالة الترحيل إلى حاوية قائمة بذاتها ذات وحدة تخزين مسماة ، يمكنك فقط إنشاء وحدة التخزين بدلا من بدء/إيقاف الحاوية.

  5. انسخ البيانات.

    docker run --rm -v "SRC_VOLUME:/from" -v "DST_VOLUME:/to" \    bash -c '        shopt -s dotglob        # rm -r /to/*  # e.g. pg might have populated the new volume        cp -r /from/* /to    '

    حيث سرك _ حجم ، دست _ حجم - اسم وحدة التخزين ، معرف ، أو المسار المطلق إلى دليل على المضيف.

    لسرد وحدات التخزين المرفقة باستخدام حاوية:

    docker inspect CONTAINER --format '{{json .Mounts}}' | jq

    حيث الحاوية-اسم الحاوية أو المعرف.

  6. ابدأ الحاوية الجديدة.

    docker run ...# ordocker-compose up -d
  7. نفرح :)

في حال كنت ترغب في تجربة إعدادات مختلفة ، تحقق مما يلي جوهر.

لقد وجدت هذا يبحث عن معلومات حول وحدات التخزين المسماة. وأنا أدرك هذا هو وظيفة قديمة ولكن بعد قراءته فعلت بعض البحوث وجدت أنه من الممكن في هذا الوقت على الأقل ، ل تصدير نظام الملفات كما القطران، و استيراد القطران إلى صورة أو كصورة.

قم أولا بتصدير نظام ملفات الحاويات الخاص بك:

docker container export -o filename CONTAINER

وبعد / عند إنشاء حاوية جديدة استيراد القطران إلى نظام الملفات الخاص بك:

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

إذا قمت بتحديد أرشيف ، يقوم عامل الإرساء بإفراغه في الحاوية بالنسبة إلى / (الجذر).

يمكنك أيضا إنشاء صور غير موسومة مع هذا الطراز الرائع الصغير:

docker import filesystem.tar