ডকারে বিদ্যমান নামযুক্ত ভলিউমে ডেটা যুক্ত করার সঠিক উপায় কী?


91

আমি ভলিউম ধারক সহ পুরানো উপায়ে ডকার ব্যবহার করছিলাম:

docker run -d --name jenkins-data jenkins:tag echo "data-only container for Jenkins"

তবে এখন একটি নামযুক্ত ভলিউম তৈরি করে আমি নতুন উপায়ে পরিবর্তন করেছি:

 docker volume create --name my-jenkins-volume 

আমি এই নতুন ভলিউমটিকে একটি নতুন জেনকিন্স ধারককে আবদ্ধ করেছি। আমি কেবল একটি জিনিস রেখে এসেছি সেটি হল একটি ফোল্ডার যাতে /var/jenkins_homeআমার আগের জেনকিন্স ধারকটি রয়েছে। (ব্যবহার করে docker cp) এখন আমি new ফোল্ডারের বিষয়বস্তুতে আমার নতুন নামযুক্ত ভলিউমটি পূরণ করতে চাই।

আমি কি সেই ফোল্ডারের সামগ্রীটি অনুলিপি করতে পারি /var/lib/jenkins/volume/my-jenkins-volume/_data?

উত্তর:


141

আপনি অবশ্যই ডেটা সরাসরি অনুলিপি করতে পারেন/var/lib/docker/volumes/my-jenkins-volume/_data , তবে এটি করে আপনি:

  • ডকার হোস্টের শারীরিক অ্যাক্সেসের উপর নির্ভর করে। আপনি যদি রিমোট ডকার এপিআইয়ের সাথে ইন্টারঅ্যাক্ট করেন তবে এই কৌশলটি কাজ করবে না।

  • ভলিউম বাস্তবায়নের একটি বিশেষ দিকের উপর নির্ভর করা ভবিষ্যতে পরিবর্তিত হতে পারে, আপনার যে নির্ভরযোগ্য কোনও প্রক্রিয়া ভেঙে দেয়।

আমি মনে করি আপনি কমান্ড লাইন ক্লায়েন্টের মাধ্যমে ডকার এপিআই ব্যবহার করে যে কাজগুলি সম্পন্ন করতে পারবেন তার উপর নির্ভর করা ভাল। সবচেয়ে সহজ সমাধানটি হ'ল কেবল কোনও সহায়ক পাত্র ব্যবহার করা, এরকম কিছু:

docker run -v my-jenkins-volume:/data --name helper busybox true
docker cp . helper:/data
docker rm helper

4
আপনার দ্বিতীয় বুলেট সম্পর্কিত, আপনি docker volume inspect my-jenkins-volume --format '{{.Mountpoint}}'এটির শারীরিক অবস্থান প্রোগ্রামগতভাবে পেতে চালাতে পারেন । এখনও দুর্দান্ত ধারণা মত মনে হয় না।
c24w

9
এই সহায়ক কন্টেইনারটি আসলে চালানোর দরকার নেই। এটি কেবল এটি তৈরির জন্য চালানো docker cpএবং তারপরে এটি সরানোর জন্য যথেষ্ট ।
অ্যালেক্স ২

ফলাফলগুলি দেখতে বা ফাইলগুলিকে ম্যানুয়ালি সংশোধন করতে আপনি সেই ধারকটিতে চালিত করতে পারবেন না।
CodeOrElse

4
নোট করুন যে ম্যাকের জন্য ডকার/var/lib/docker/volumes/my-jenkins-volume/_data ব্যবহার করার সময় তালিকাটি কাজ করে না কারণ ফাইলগুলি অ্যাক্টিভ ভার্চুয়াল মেশিনের ভিতরে সঞ্চিত থাকে । ফোরাম.ডোকার.com
t/

4
সত্য এখানে ব্যাখ্যা stackoverflow.com/questions/29762231/...
Zuabi

32

আপনি এক লাইনের গৃহীত উত্তর হ্রাস করতে পারেন, উদাহরণস্বরূপ

docker run --rm -v `pwd`:/src -v my-jenkins-volume:/data busybox cp -r /src /data

4
আমি ভাবছি যদি / tmp এর ক্ষণস্থায়ী প্রকৃতিটি সিপি শেষ হওয়ার আগে সম্ভবত আপনার ডেটা মুছে ফেলার জন্য ধারকটির ঝুঁকি তৈরি করতে পারে? pathname.com/fhs/pub/fhs-2.3.html#TMPTEMPORARYFILES
thurt

4
লিঙ্কটি আসলে / টেম্পে ফাইলগুলির আজীবন স্পষ্ট করে না। আমি বলেছি: "প্রোগ্রামগুলি অবশ্যই ধরে নিতে পারে না যে / tmp এ থাকা কোনও ফাইল বা ডিরেক্টরি প্রোগ্রামের অনুরোধের মধ্যে সংরক্ষিত আছে।" যা বোঝায় যে ফাইলগুলি টিকে থাকবে, তবে এটি একটি গ্যারান্টি। ডকারের জন্য -v বিকল্পটি যদি বিদ্যমান না থাকে তবে ধারকটিতে একটি ডিরেক্টরি তৈরি করবে, সুতরাং / টিএমপি / এসসিআর / এসসিআর-তে পরিবর্তন করা যদি আপনি এই সম্ভাব্য রেসের শঙ্কায় উদ্বিগ্ন হন তবে কাজ করবে। আমি এর প্রতিফলন করার জন্য উত্তরটি সম্পাদনা করব, কারণ কোনও খারাপ দিক নেই।
হেডড্যাব

4
-v `pwd`:/srcকমান্ডটি হোস্টের উপর চলছে তা বোঝাচ্ছে না ? ( pwdউদাহরণস্বরূপ, এটি কোনও আলাদা মেশিন হলে হোস্ট মানচিত্র কীভাবে পারে ? - এটি পারে না)) হোস্টে ডকার কমান্ড চলমান না থাকলে এটি কাজ করে না। আমি বিশ্বাস করি যে আমাদের কাছে ডকার সিপি রয়েছে। দেখে মনে হচ্ছে এটি ডকারের জন্য "উপায়" নয় - এটি কেবল একটি বিশেষ কেস যা ডকর্ড কমান্ড হোস্টে চলমান কেবল তখনই কাজ করে। আমি কি সঠিকভাবে বুঝতে পারি?
উইক

হ্যাঁ, আমি মনে করি আপনি ঠিক বলেছেন। pwdহোস্ট মেশিনে একটি ফাইল সমাধান করতে হবে। ডকারের মাউন্ট ডকুমেন্টেশন থেকে: "বাইন্ড মাউন্টগুলির ক্ষেত্রে, প্রথম ক্ষেত্রটি হোস্ট মেশিনের ফাইল বা ডিরেক্টরিতে যাওয়ার পথ।"
হেডড্যাব

4
অতএব, এটি কোনও দূরবর্তী হোস্টে থাকলে আপনার স্থানীয় ফাইলগুলি কন্টেইনারে অনুলিপি করে কাজ করে না , কারণ আপনি মাউন্ট করছেন যা দূরবর্তী হোস্টে উপস্থিত থাকার প্রয়োজনও নেই। এর পরিবর্তে ডাইমিট্রো মেলিনিচুকের সমাধান (তৈরি করুন + সিপি + আরএম) স্থানীয় লোকগুলিকে যেখানেই চলছে তা নির্ধারিত করেই ধারকটিতে অনুলিপি করে। pwd
জাভি মন্টেরো

27

ইতিমধ্যে বিদ্যমান নামযুক্ত ভলিউমে ডেটা যুক্ত করতে আপনাকে কিছু ধারক শুরু করার দরকার নেই, কেবল একটি ধারক তৈরি করুন এবং সেখানে ডেটা অনুলিপি করুন:

docker container create --name temp -v my-jenkins-volume:/data busybox
docker cp . temp:/data
docker rm temp

4
তবে শর্ত থাকে যে ব্যস্তবক্সের সামগ্রীগুলি সত্যই প্রয়োজন নেই; আপনি hello-worldএটি দিয়ে এটি করতে পারেন এবং এটি কাজ করে। busybox1.22MB হয়। পরিবর্তে hello-world13.3kB। প্রশ্নটি হ'ল: আমরা ডকফাইফিল থেকে স্ক্র্যাচ থেকে একইভাবে করতে পারি, আমরা কি কেবল "ভলিউম" মাউন্ট "করতে চাই এবং কখনও কখনও ধারকটি শুরু করতে চাই না বলে আমরা চিত্র হিসাবে" কিছুই না "দিয়ে একটি" ডকার পাত্রে তৈরি "করতে পারি?
জাভি মন্টেরো

4
শীর্ষস্থানীয় এই সমাধানের জন্য +1 ভোট দিয়েছে তবে এর জন্য সঠিক বাক্য docker cpdocker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
গঠনটি

4

মাই-ভোল নামক ডকার ভলিউমে ~ / ডেটা বিষয়বস্তু অনুলিপি করার পদক্ষেপ এখানে রয়েছে

পদক্ষেপ 1. একটি "অস্থায়ী" ধারকটিতে ভলিউম সংযুক্ত করুন। টার্মিনালে চালানোর জন্য এই কমান্ড:

docker run --rm -it --name alpine --mount type=volume,source=my-vol,target=/data alpine

2. এর অনুলিপি বিষয়বস্তু ধাপ ~ / ডাটা মধ্যে আমার-ভোল । তার জন্য নতুন টার্মিনাল উইন্ডোতে এই কমান্ডগুলি চালান:

cd ~/data docker cp . alpine:/data

এই বিষয়বস্তু কপি হবে ~ / ডাটা মধ্যে আমার-ভোল ভলিউম। অনুলিপি পরে অস্থায়ী ধারক প্রস্থান করুন।

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