বিভিন্ন হোস্টের মধ্যে ডকার পাত্রে কীভাবে সরানো যায়?


99

আমি একটি হোস্ট থেকে অন্য হোস্টে চলমান ডকার চালিত পাত্রে কোনও উপায় খুঁজে পাচ্ছি না।

আমরা ইমেজগুলির মতো করে আমার পাত্রে কীভাবে সংগ্রহস্থলগুলিতে ঠেলে দিতে পারি? বর্তমানে, আমি ধারকগুলির অভ্যন্তরে চলমান অ্যাপ্লিকেশনগুলির সাথে সম্পর্কিত ডেটা সঞ্চয় করতে ডেটা ভলিউম ব্যবহার করছি না। সুতরাং কিছু ডেটা কনটেইনারের অভ্যন্তরে থাকে যা আমি সেটআপটি নতুন করে ডিজাইনের আগে চালিয়ে যেতে চাই।



নোট করুন যে আপনি রফতানি / আমদানির পরিবর্তে সঞ্চয় / লোড ব্যবহার করতে চান, যেমন মেটাডেটা এবং ইতিহাস সংরক্ষণ করে and
বুর্স্টাহলিক

এটি @ অহল্টের উত্তরের মন্তব্য হওয়া উচিত?
মার্টিন থম্পসন

docker saveচিত্র সংরক্ষণের জন্য, পাত্রে নয়। docs.docker.com/engine/references/commandline/save
stmllr

উত্তর:


59

আপনি চলমান ডকার ধারকটিকে একটি হোস্ট থেকে অন্য হোস্টে স্থানান্তর করতে পারবেন না।

আপনি আপনার ধারকটির পরিবর্তিত চিত্রগুলি একটি চিত্রের সাথে প্রতিশ্রুতিবদ্ধ করতে পারেন docker commit, চিত্রটিকে একটি নতুন হোস্টে স্থানান্তর করতে এবং তারপরে একটি নতুন ধারক দিয়ে শুরু করতে পারেনdocker run । এটি আপনার অ্যাপ্লিকেশনটি ধারকটির ভিতরে তৈরি করা কোনও ডেটা সংরক্ষণ করবে।

এনবি: এটি ভলিউমের ভিতরে সঞ্চিত ডেটা সংরক্ষণ করে না; আপনাকে নতুন হোস্টে ম্যানুয়ালি ডেটা ভলিউম স্থানান্তর করতে হবে।


@ অ্যালার্কস কি প্রথম পদক্ষেপটি কনটেইনার বন্ধ করা হবে না, এবং তারপরে কমিট করবেন?
ভ্যালেন্ট

@ ভ্যালেন্ট উভয়ই কন্টেইনার চালানো এবং বন্ধ করার প্রতিশ্রুতিবদ্ধ
ক্রোলাইউড

4
এই উত্তরটি আপনাকে ব্যবহার করার জন্য ঠিক যে আদেশগুলি ব্যবহার করা দরকার তা ব্যাখ্যা করে না, যা আমার মতো কোনও নবীর পক্ষে শক্ত করে তোলে
Paul Kruger

ডকার-চেকপয়েন্ট আপনাকে হোস্টগুলির মধ্যে একটি "চলমান" ধারক স্থানান্তর করতে দিতে পারে, যদি তারা উভয়ই সিআরআইইউ সমর্থন করে।
ডিজিআরএমওপি

4
1. ধারক বন্ধ করুন docker stop x; 2. আপনার পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ docker commit -p x x; 3. ছবিতে ধারক সংরক্ষণ করুন docker save -o x x; ৪. এক্স ফাইলটিকে নতুন হোস্টে স্থানান্তর করুন এবং নতুন হোস্টে নতুন চিত্রটি লোড করুন dokcer load -i x(আপনি যদি -vবিকল্পটি দিয়ে ধারকটি শুরু করেন তবে আপনাকে এই ফাইলগুলিও নতুন হোস্টে স্থানান্তর করতে হবে); 5. এই চিত্রটি দিয়ে চালানdocker run (-v is required to mount these files if needed)
লাউ রিয়েল

96

বিকল্পভাবে, আপনি যদি কোনও সংগ্রহস্থলের দিকে চাপ দিতে না চান:

  1. একটি টারবলে কনটেইনারটি রফতানি করুন

    docker export <CONTAINER ID> > /home/export.tar
    
  2. আপনার টার্বলকে নতুন মেশিনে সরান

  3. এটি আবার আমদানি করুন

    cat /home/export.tar | docker import - some-name:latest
    

8
ভলিউমের অভ্যন্তরে সঞ্চিত ডেটা সংরক্ষণ করে না।
stmllr

4
এটি কীভাবে কাজ করার কথা? আমদানির পরে আমি নতুন চিত্র পাই, এবং তারপর কী? শুধু একটি নতুন রান কমান্ড করবেন?
ভ্যালেন্ট

4
এটি আসলেই খুব খারাপ পরামর্শ, বিশেষত পাত্রে চলমান ডাটাবেসগুলির ক্ষেত্রে। আমি এই পরামর্শটি চেষ্টা করেছি এবং এটি কার্যকর হয়নি। এটি কি প্রথমে ধারক থামিয়ে দিয়ে কাজ করতে পারে?
ভ্যালেন্ট

4
এই পরামর্শটি কেবলমাত্র একটি বিকল্পের জন্যই বোঝানো হয়েছিল। এটি আপনার পরিস্থিতির জন্য কাজ করতে পারে, এটি নাও পারে। আমার জন্য, আমি সেই সময়ে ডাটাবেস প্রতিলিপি ডকার পাত্রে সেট আপ করছিলাম এবং রফতানি / আমদানির জন্য, ডেটা সংরক্ষণের বিষয়ে কোনও চিন্তা ছিল না, কারণ আমি নিয়মিত ডাটাবেস ডেটার ব্যাকআপ চালিয়ে যাচ্ছিলাম অন্য কোনও টারবাল থেকে। তার জন্য, এটি পুরোপুরি কাজ করেছিল worked
অহল্ট

34

বিভ্রান্তিকর ম্যানুয়ালগুলি এবং বিভ্রান্তিমূলক টিউটোরিয়ালের পরে অবশেষে আমার পক্ষে কী কাজ করেছে, যেহেতু ডকার স্পষ্টতই আমার লেখার সময় স্ফীত প্রত্যাশার উঁকি মারার সময়টি হলেন:

  1. সংরক্ষণাগারটিতে ডকার চিত্রটি সংরক্ষণ করুন:
    docker save image_name > image_name.tar
  2. অন্য মেশিনে অনুলিপি
  3. এই অন্যান্য ডকার মেশিনে, নিম্নলিখিত উপায়ে ডকার লোড চালান:
    cat image_name.tar | docker load

অন্য উত্তরে প্রস্তাবিত হিসাবে রফতানি এবং আমদানি পোর্ট এবং ভেরিয়েবলগুলি রফতানি করে না, যা আপনার ধারকটি চালানোর জন্য প্রয়োজন হতে পারে। এবং আপনি "কোনও আদেশ নির্দিষ্ট নেই" ইত্যাদির মতো জিনিসগুলি শেষ করতে পারেন ... যখন আপনি এটি অন্য কোনও মেশিনে লোড করার চেষ্টা করবেন।

সুতরাং, সংরক্ষণ এবং রফতানির মধ্যে পার্থক্য হ'ল সেভ কমান্ড পুরো চিত্রটি ইতিহাস এবং মেটাডেটার সাথে সংরক্ষণ করে, যখন এক্সপোর্ট কমান্ড কেবল ফাইল স্ট্রাকচার (ইতিহাস বা মেটাডেটা ছাড়াই) রফতানি করে।

বলার অপেক্ষা রাখে না যে, যদি আপনি ইতিমধ্যে অন্য কোনও ডক কনটেইনার দ্বারা আমদানি করা ডকার হাইপার-ভিজারটিতে নেওয়া পোর্টগুলি ইতিমধ্যে গ্রহণ করা হয় তবে আপনি দ্বন্দ্বের অবসান ঘটাতে পারবেন এবং আপনাকে এক্সপোজড পোর্টগুলি পুনরায় কনফিগার করতে হবে।


4
বিশাল সাহায্যকারী। "কোনও আদেশ নির্দিষ্ট নেই" বার্তাটি আমাকে পাগল করছে।
রিন্টুল

"কোনও আদেশ নির্দিষ্ট নেই" বার্তাটি আমাকেও পাগল করছে। আমি << কন্টেইনার- id> স্ট্যাকস্টর্ম-লোকাল: ২.৯, এবং ডকার টান স্ট্যাকস্টর্ম-লোকাল: অন্য হোস্ট থেকে ২.৯ ব্যবহার করি।
হুয়া জাং

এটি আমার পক্ষে কাজ করে
এম.আলি এল-সায়েদ

18

ডকার ডকুমেন্টেশন থেকে:

docker exportধারকটির সাথে সম্পর্কিত ভলিউমের সামগ্রীগুলি রফতানি করে না। ধারকটিতে বিদ্যমান ডিরেক্টরিটির উপরে যদি একটি ভলিউম মাউন্ট করা থাকে তবে ভলিউমের সামগ্রীগুলি নয়, অন্তর্নিহিত ডিরেক্টরিটির docker exportসামগ্রী রফতানি করবে । পড়ুন ব্যাকআপ, অথবা স্থানান্তরণের ডেটা ভলিউম, পুনঃস্থাপন ব্যবহারকারী গাইডে উদাহরণের জন্য একটি ভলিউম ডাটা রপ্তানি করে।


ক্লাস্টার
এইচকিউ শটডাউন

7

এই স্ক্রিপ্টটি ব্যবহার করুন: https://github.com/ricardobranco777/docker-volume.sh

এটা করে খন্ডে ডেটা সংরক্ষণ।

ব্যবহারের উদাহরণ:

# Stop the container   
docker stop $CONTAINER

# Create a new image   
docker commit $CONTAINER $CONTAINER

# Save image
docker save -o $CONTAINER.tar $CONTAINER

# Save the volumes (use ".tar.gz" if you want compression)
docker-volumes.sh $CONTAINER save $CONTAINER-volumes.tar

# Copy image and volumes to another host
scp $CONTAINER.tar $CONTAINER-volumes.tar $USER@$HOST:

# On the other host:
docker load -i $CONTAINER.tar
docker create --name $CONTAINER [<PREVIOUS CONTAINER OPTIONS>] $CONTAINER

# Load the volumes
docker-volumes.sh $CONTAINER load $CONTAINER-volumes.tar

# Start container
docker start $CONTAINER

4
এডাব্লুএস লিনাক্স (সেন্টোস) এ আমার পক্ষে কাজ করেনি। এন্ডিতে আমি ভলিউম ডির সন্ধানের জন্য ডকার ইন্সপেক্ট ব্যবহার করার নিম্ন প্রযুক্তি গ্রহণ করেছি, তারপরে ম্যানুয়ালি সেই অনুলিপিটি তৈরি করেছি।
জেসনপ্লিটেক্সট

@ জেসনপ্লিটেক্সট হয়ত সেলইনক্সের সাথে সম্পর্কিত কিছু হতে পারে? আপনি কি SELinux সক্ষম করেছেন?
রিকার্ডো ব্র্যাঙ্কো

এটি পান: টার: সদস্যের নাম থেকে নেতৃস্থানীয় `/ 'সরানো
hjhan

@ হজাহান এটি একটি সাধারণ টার বার্তা। ত্রুটি নয় এমনকি একটি সতর্কতাও নয়।
রিকার্ডো ব্র্যাঙ্কো

1

আমি এর জন্য অনেকগুলি সমাধান চেষ্টা করেছি এবং এটিই আমার পক্ষে কাজ করেছে:

1.com জমা দিন / নতুন ছবিতে ধারক সংরক্ষণ করুন:

  1. ++ ধারকটির প্রতিশ্রুতিবদ্ধ :
    # ডকার স্টপ
    # ডকার কমিট CONTAINER_NAME
    # ডকার সংরক্ষণ করুন - আউটপুট IMAGE_NAME. বা IMAGE_NAME: TAG


PS: "আমাদের ধারক CONTAINER_NAME এর '/ var / home' এ একটি মাউন্ট ভলিউম রয়েছে" "(আপনার ধারকটির ভলিউম পাথ নির্দিষ্ট করতে আপনাকে পরীক্ষা করতে হবে: # ডকার CONTAINER_NAME পরিদর্শন করবেন)

  1. ++ এর ভলিউম সংরক্ষণ করুন: আমরা জিনিসটি করতে একটি উবুন্টু চিত্র ব্যবহার করব।
    #
    এমকিডির ব্যাকআপ # ডকার রান --rm --volume-CONTAINER_NAME -v {{pwd d / ব্যাকআপ থেকে: / ব্যাকআপ উবুন্টু বাশ -c "সিডি / ভার / হোম এবং & টার সিভিএফ / ব্যাকআপ / ভলিউম_ব্যাকআপ.টার।"

এখন আপনি যখন $ w পিডব্লিউডি backup / ব্যাকআপের দিকে তাকাবেন, আপনি আমাদের ট্যুর বিন্যাসের আওতায় পাবেন।
এখন অবধি, আমাদের আমাদের কনটেইনারের ইমেজ 'আইএমএগ্রা.এল.টি.আর' এবং এর ভলিউম 'ভলিউম_ব্যাকআপ.টার' রয়েছে।

এখন আপনি একই হোস্টটিকে নতুন হোস্টে পুনরায় তৈরি করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.