হোস্ট থেকে ডকার পাত্রে ফাইলগুলি অনুলিপি করা হচ্ছে


1573

আমরা যে ডক পাত্রে কাজ করি তার জন্য একটি ব্যাকআপ তৈরি এবং সমাধান পুনরুদ্ধার করার চেষ্টা করছি।

আমার তৈরি ডকার বেস ইমেজটি রয়েছে ubuntu:baseএবং ফাইলগুলি যুক্ত করার জন্য এটি প্রতিবারই ডকার ফাইলটি দিয়ে পুনরায় তৈরি করতে চাই না।

আমি একটি স্ক্রিপ্ট তৈরি করতে চাই যা হোস্ট মেশিন থেকে চালিত হয় এবং ubuntu:baseডকার চিত্র ব্যবহার করে একটি নতুন ধারক তৈরি করে এবং তারপরে সেই ধারকটিতে ফাইলগুলি অনুলিপি করে।

আমি কীভাবে হোস্ট থেকে পাত্রে ফাইলগুলি অনুলিপি করতে পারি?


11
আপনি যদি পুনর্নির্মাণ করতে না চান, তবে " ডকার কমিট " করবেন না কেন ? এটি আপনার চিত্রকে সংরক্ষণ করে।
বেরেন্ড ডি বোয়ার

26
একটি ধারণার উপরে কেবলমাত্র একটি মন্তব্যই সম্বোধন করেনি: সাধারণভাবে, পাত্রে "অল্পকালীন" হিসাবে আচরণ করুন। কোনও চলমান ধারক (টেস্টিং, প্রোটোটাইপিং) থেকে / ফাইলগুলি অনুলিপি করতে কেসগুলি ব্যবহার করা হয়। তবে আপনি যদি নিজেকে এমন একটি অবস্থানে খুঁজে পান যেখানে ডকফিলিলেস এবং / অথবা রচনাগুলি আপনার প্রয়োজনীয় যা আপনি পুনর্নির্মাণ করতে না পারেন তবে আপনি খারাপ জায়গায় থাকতে পারেন। আপনি সাধারণত পাত্রে ব্যাক আপ রাখতে চান না যেমন তারা ওএস বা ভিএম অবজেক্টস। সাধারণত বলছেন :-)
স্কট প্রিভ

উত্তর:


2668

cpকমান্ড ফাইল কপি করতে ব্যবহার করা যাবে।

ধারকটিতে একটি নির্দিষ্ট ফাইল অনুলিপি করা যায়:

docker cp foo.txt mycontainer:/foo.txt

ধারক থেকে একটি নির্দিষ্ট ফাইল অনুলিপি করা যেতে পারে:

docker cp mycontainer:/foo.txt foo.txt

জোর জন্য, mycontainerএকটি হল ধারক আইডি, না একটি ইমেজ আইডি।

ফোল্ডারে থাকা একাধিক ফাইলগুলি ফোল্ডারে এটি ব্যবহার করে srcঅনুলিপি করা যেতে পারে target:

docker cp src/. mycontainer:/target
docker cp mycontainer:/src/. target

তথ্যসূত্র: ডকার সিএলআই ডক্স এর জন্যcp

1.8 এর আগে ডকার সংস্করণগুলিতে কেবল কোনও ধারক থেকে হোস্টে ফাইল অনুলিপি করা সম্ভব ছিল। হোস্ট থেকে কোনও পাত্রে নয়।


2
এছাড়াও নোট করুন এটি হোস্ট ভিএম বা প্রধান ওএসে থাকতে পারে এবং হোস্টটি হোস্টে কনটেইনার বা
ভিএম

7
একটি ডকফাইফিলের মধ্যে আপনি বিল্ড সময় ফাইল যুক্ত করতে ADD কীওয়ার্ডটি ব্যবহার করতে পারেন।
0x7d7b

4
প্রযোজ্য ক্ষেত্রে @ h3nrik COPYপছন্দ করেছেনADD
ফ্রাঙ্কলিন ইউ

10
docker cpহোস্ট থেকে কন্টেইনার থেকে অনুলিপি ব্যবহার ভাল কাজ করে, কিন্তু হোস্ট থেকে কনটেইনার ফাইলগুলি অনুলিপি করতে এটি ব্যবহার করার সময়, কোনও প্রভাব নেই ... কেন কেউ জানেন? ডকার সংস্করণ: ডকার সংস্করণ 1.10.3, বিল্ড cb079f6- অসমর্থিত
Ace.Yin

2
আমি কি হোস্ট থেকে ধারক পর্যন্ত ডকার সিপি ব্যবহার করে একাধিক ফাইল অনুলিপি করতে পারি?
যোগেশ

182
  1. ধারকের নাম বা সংক্ষিপ্ত ধারক আইডি পান:

    $ docker ps
    
  2. পূর্ণ ধারক আইডি পান:

    $ docker inspect -f   '{{.Id}}'  SHORT_CONTAINER_ID-or-CONTAINER_NAME
    
  3. অনুলিপি নথি:

    $ sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE
    

উদাহরণ:

$ docker ps

CONTAINER ID      IMAGE    COMMAND       CREATED      STATUS       PORTS        NAMES

d8e703d7e303   solidleon/ssh:latest      /usr/sbin/sshd -D                      cranky_pare

$ docker inspect -f   '{{.Id}}' cranky_pare

অথবা

$ docker inspect -f   '{{.Id}}' d8e703d7e303

d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5

$ sudo cp file.txt /var/lib/docker/aufs/mnt/**d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5**/root/file.txt

13
আমার জন্য হোস্টের মাউন্টিং পাথটিতে একটি ছিল না aufsতবে devicemapper। কন্টেনারগুলি মাউন্টিং পাথ চেক করার সহজ উপায় (এটি চলমান অবস্থায়) কমান্ডটি চালানো mount
ডেরেনিও

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

2
নতুন পথটি হ'ল / var / lib / ডকার / ডিভাইসমেপার / mnt / <<ID>> / রুটফএস /
এমকিউড্রোস

4
আমার জন্য, ডকার 1.4.1 (বর্তমান সর্বশেষ) -এ, এটি/var/lib/docker/aufs/diff/<id>/
ব্যবহারকারী 193130

3
দরিদ্র ম্যাকওএস ব্যবহারকারীদের সম্পর্কে কী? মাউন্ট ডিরেক্টরি /var/libআমার জন্য আছে। find / -name dockerকোন উপকারী ছিল না।
প্রেগাগুপড

141

সবচেয়ে পরিষ্কার উপায় হ'ল কনটেইনারটি শুরু করার সময় পাত্রে হোস্ট ডিরেক্টরিটি মাউন্ট করা:

{host} docker run -v /path/to/hostdir:/mnt --name my_container my_image
{host} docker exec -it my_container bash
{container} cp /mnt/sourcefile /path/to/destfile

3
আপনি কিভাবে ধারক চালাতে পারেন? আমি ভেবেছিলাম আপনি কেবল একটি চিত্র দিয়ে তা করতে পারেন।
পাভেল জায়টসেভ

কনটেইনারটি বিদ্যমান থাকলে ওরফে আগে চলেছে আমি এটি কাজ করতে পারি না। নীচে টার ভাল কাজ করে।
Eino Mäkitalo

1
আমার পক্ষে এই একমাত্র উপায়টি ইমেজ চালানোর পাশাপাশি ভলিউম সংযুক্ত করা ছিল (ধারকটি ইনস্ট্যান্ট করছে)। এর সাথে শেষ হয়েছে:docker run -d -p -v /host/path:/mnt --name container_name image_name
পিটার এন

2
এটি আমার পক্ষে কাজ করে না। কমপক্ষে একটি ধারক চালাতে পারে না। কেবল চিত্র চালাতে পারে
শশাঙ্ক হেগদে

1
আমি অবাক হয়েছি এটি docker cpএকমুখী অপারেশন!
থারস্মমনার

115

নীচে এটি করার মোটামুটি কুৎসিত উপায় কিন্তু এটি কার্যকর করে।

docker run -i ubuntu /bin/bash -c 'cat > file' < file

7
এটি দুর্দান্ত কাজ করে! কিন্তু ভুলবেন না পরিবর্তন কমিট করতে docker commit `docker ps -l -q` ubuntu-with-file। অন্যথায় পরিবর্তনটি হারাতে হবে (পরিবর্তে আপনি যে কোনও নামটি ব্যবহার করুন ubuntu-with-file)
মাইকেল_শার্ফ

@ এরিক: কনটেইনার চলার সময় ফাইলটি কোথায় অবস্থিত?
কোয়ানোর

49
বিজ্ঞাপনে, আমরা docker execচলমান docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/
ধারকটির

17
@ মিকল আমার ধারণা এটির docker exec -i ...পরিবর্তে হওয়া উচিত -it, কারণ কোনও ফাইল থেকে পাইপ করার সময় টিটিওয়াই নেই।
z0r

4
আপনি যদি এখনও ডকারের পুরানো সংস্করণে (যেমন আমি আছি) আটকে থাকেন এবং পুরো ডিরেক্টরিটি অনুলিপি করতে চান তবে আপনি এটি করতে পারেন: tar -c -v -f - /path/to/host/directory | docker exec -i <container-name> bash -c 'tar -x -v --strip-components 1 -f - -C /path/to/container/directory'
ইহানসন

43

যদি আপনার চলমান ধারকটিতে এটি করতে হয় তবে আপনি ডকার এক্সেকে ব্যবহার করতে পারেন (1.3-এ যোগ করেছেন)।

প্রথমে ধারকটির নাম বা আইডি সন্ধান করুন:

$ docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS              PORTS                   NAMES
b9b7400ddd8f        ubuntu:latest                "/bin/bash"         2 seconds ago       Up 2 seconds                                elated_hodgkin

উপরের উদাহরণে আমরা হয় ব্যবহার করতে পারি b9b7400ddd8fবা elated_hodgkin

আপনি যদি /tmp/somefilesহোস্টের সমস্ত কিছু ধারকটিতে অনুলিপি করতে /var/wwwচান তবে:

$ cd /tmp/somefiles
$ tar -cv * | docker exec -i elated_hodgkin tar x -C /var/www

তারপরে আমরা ধারকটিতে কার্যকর করতে পারি /bin/bashএবং এটি কাজ করে যাচাই করতে পারে:

$ docker exec -it elated_hodgkin /bin/bash
root@b9b7400ddd8f:/# ls /var/www
file1  file2

সেন্টোস 7.4-এ দুর্দান্ত উদ্ভাবনী আইডিয়ায় ডকার 1.16 এ দুর্দান্ত কাজ করে।
ডুডি বয়

41
  1. একটি নতুন ডকস্পাইল তৈরি করুন এবং বিদ্যমান চিত্রটি আপনার বেস হিসাবে ব্যবহার করুন।

    FROM myName/myImage:latest
    
    ADD myFile.py bin/myFile.py
    
  2. তারপরে ধারকটি তৈরি করুন:

    docker build .
    

2
এটিই আমার পক্ষে কাজ করেছিল। আর কিছু না. ধন্যবাদ!
ওয়েন

এটি সরাসরি নতুন ধারক নয়, একটি নতুন চিত্র তৈরি করবে। আপনি যদি myFile.py পরিবর্তিত হিসাবে এই চিত্রটি পুনরায় ব্যবহার করেন, আপনি যদি চিত্রটি পুনর্নির্মাণ না করেন তবে এটি ফাইলের পুরানো সংস্করণটি ব্যবহার করবে।
গিলিয়াম লেব্রেটন

আপনি যদি কোনও দূরবর্তী সার্ভারে পরীক্ষা করে থাকেন তবে আমি এটি দ্রুততম পন্থায় দেখতে পাচ্ছি।
ডোমিনিক ক্রৌলাক

মতে এই অধিকাংশ লোক বরং এডিডি চেয়ে অনুলিপি ব্যবহার করা উচিত। তবে স্থানীয় ফাইলগুলির জন্য (এই উদাহরণ হিসাবে) তারা সমান।
hoosierEE

39

সমাধানটি নীচে দেওয়া হল,

ডকার শেল থেকে,

root@123abc:/root#  <-- get the container ID

হোস্ট থেকে

cp thefile.txt /var/lib/docker/devicemapper/mnt/123abc<bunch-o-hex>/rootfs/root

ধারকটি ফাইল সিস্টেমে বসে যেখানে ফাইলটি সরাসরি অনুলিপি করা উচিত।


10
দুর্দান্ত উত্তর। নতুন ডকার রিলিজগুলিতে পাথটির নাম / var / lib / ডকার / aufs / mnt /
এলেক্স ভোলকভ

ডিভাইসম্যাপার পাথটি ফেকারে ডকার 1.6 সহ কাজ করছে বলে মনে হচ্ছে না। এটিকে একটি পৃথক প্রশ্ন, স্ট্যাকওভারফ্লো / প্রশ্ন / 29939419 /… হিসাবে রেখে দিয়েছেন , যে কোনও মন্তব্য প্রশংসিত হবে।
যোগেশ_ডি

33

সাধারণত তিন ধরণের রয়েছে:

  1. একটি ধারক থেকে হোস্ট পর্যন্ত

    docker cp container_id:./bar/foo.txt .
    

dev1

  1. হোস্ট থেকে একটি ধারক পর্যন্ত

    docker exec -i container_id sh -c 'cat > ./bar/foo.txt' < ./foo.txt
    

dev2

  1. একটি ধারক থেকে একটি পাত্রে 1 এবং 2 মিশ্রিত হয়

    docker cp container_id1:./bar/foo.txt .
    
    docker exec -i container_id2 sh -c 'cat > ./bar/foo.txt' < ./foo.txt
    

dev3


6
ডকার সিপি উভয় উপায়ে কাজ করে। এক্সিকিউট, বিড়াল এবং পুনঃনির্দেশ করার দরকার নেই। ডকার সিপি হোস্ট_ফিল.টেক্সট ধারক: / পথ /
টিবিএম

32

চলমান ধারকগুলিতে ফাইল অনুলিপি করার জন্য আরেকটি সমাধান হ'ল টার ব্যবহার:

tar -c foo.sh | docker exec -i theDockerContainer /bin/tar -C /tmp -x

কপি ফাইল foo.shমধ্যে /tmpধারক করুন।

সম্পাদনা: হ্রাসকারী সরান -f, মার্টেনের মন্তব্যে ধন্যবাদ ।


আপনার যদি একটি সম্পূর্ণ ডিরেক্টরি প্রেরণের দরকার হয় তবে এটি ভাল। একটি একক ফাইলের জন্য, এরিকের উত্তর সহজ।
কেলভিন

1
@ কেলভিন: তবে টার ফাইলের বৈশিষ্ট্য এবং নামও সংরক্ষণ করে। অন্যগুলির মধ্যে এর অর্থ হল যে আপনাকে কেবল একবার নাম টাইপ করতে হবে (এবং সেখানে আপনি নিজের শেল থেকে ট্যাব সমাপ্তি পাবেন)। সুতরাং আমি বলতে চাই ডারটি আসলে সহজতর, যতক্ষণ না এটি ধারকটিতে ইনস্টল থাকে।
মার্টেন

1
-f -যদিও, ডিফল্ট আচরণ যাহাই হউক না কেন stdout- এ লিখতে হয় একটু অপ্রয়োজনীয়।
মার্টেন

এর অর্থ
টারের

আপনি ঠিক বলেছেন - হোস্টে এবং ধারকটির মধ্যে আপনার ইনস্টল করার জন্য টાર দরকার। আজকাল ডকার সিপি ব্যবহার করা আরও ভাল সমাধান।
jomat

24

হোস্ট থেকে চলমান পাত্রে কোনও ফাইল অনুলিপি করতে

docker exec -i $CONTAINER /bin/bash -c "cat > $CONTAINER_PATH" < $HOST_PATH

উপর ভিত্তি করে এরিক এর উত্তর এবং Mikl এবং z0r মন্তব্য।


গ্রহণযোগ্য সমাধানগুলি চলমান ধারকগুলিতে স্থানান্তর করার সময় কখনও কখনও ফাইলগুলির প্রসারণকে বিরক্ত করে। এটি এ জাতীয় ক্ষেত্রে নিখুঁত কাজ করে
স্বপ্ন

15

ডকার 1.8 এর সাহায্যে docker cpহোস্ট থেকে ধারক করে ফাইলগুলি অনুলিপি করতে সক্ষম। ডকার ব্লগ পোস্টটি ডকারের 1.8 ঘোষণা করে: কন্টেন্ট ট্রাস্ট, সরঞ্জামবক্স এবং রেজিস্ট্রি এবং অর্কেস্টেরেশন সম্পর্কিত আপডেটগুলি দেখুন


এখানে একটি উদাহরণ রয়েছেdocker cp foo.txt mycontainer:/foo.txt
লকউব্রব

15

শিরোনামে এই প্রশ্নের উত্থাপিত 'হোস্ট থেকে ডকার পাত্রে ফাইলগুলি অনুলিপি করা' এই প্রশ্নের সরাসরি উত্তর।

ব্যবহার করে দেখুন docker cp। এটি করার সহজতম উপায় এবং এটি আমার ম্যাকেও কাজ করে। ব্যবহার:

docker cp /root/some-file.txt some-docker-container:/root

এই ফাইলটি কপি হবে some-file.txtডিরেক্টরির মধ্যে /rootনামে Docker ধারক মধ্যে আপনার হোস্ট মেশিনে some-docker-containerডিরেক্টরির মধ্যে /root। এটি সুরক্ষিত অনুলিপি সিনট্যাক্সের খুব কাছাকাছি। এবং আগের পোস্টে প্রদর্শিত হিসাবে, আপনি এটি বিপরীতে ব্যবহার করতে পারেন। অর্থাত্, আপনি ধারক থেকে হোস্টেও ফাইল অনুলিপি করেন।

এবং এই পোস্টটি ডাউনলিংকের আগে দয়া করে প্রবেশ করুন docker cp --help। ডকুমেন্টেশন পড়া খুব সহায়ক হতে পারে, কখনও কখনও ...

যদি আপনি সেভাবে পছন্দ করেন না এবং আপনি ইতিমধ্যে তৈরি এবং চলমান ধারকটিতে ডেটা ভলিউম চান, তবে বিনোদন আজ আপনার একমাত্র বিকল্প। আরও দেখুন কীভাবে আমি বিদ্যমান ডকার পাত্রে একটি ভলিউম যুক্ত করতে পারি?


15

আমি এখানে বেশিরভাগ (উন্নত) সমাধানের চেষ্টা করেছি কিন্তু ডকারে 17.09 (2018 এ) আর / var / lib / ডকার / আউফস ফোল্ডার নেই।

docker cpএই কাজটি সহজভাবে সমাধান করেছে।

docker cp c:\path\to\local\file container_name:/path/to/target/dir/

ধারক_নাম কীভাবে পাবেন?

 docker ps 

একটি NAMESবিভাগ আছে। একটি ব্যবহার করবেন না IMAGE


12

একটি ধারক এবং স্থানীয় ফাইল সিস্টেমের মধ্যে ফাইল / ফোল্ডার অনুলিপি করতে, কমান্ডটি টাইপ করুন:

docker cp {SOURCE_FILE} {DESTINATION_CONTAINER_ID}:/{DESTINATION_PATH}

উদাহরণ স্বরূপ,

docker cp /home/foo container-id:/home/dir

কনটিয়ার আইডি পেতে, প্রদত্ত আদেশটি টাইপ করুন:

docker ps

উপরের সামগ্রীটি ডকার ডট কম থেকে নেওয়া হয়েছে ।


8

ধারক ইতিমধ্যে চলমান রয়েছে, প্রদত্ত আদেশটি টাইপ করুন:

# cat /path/to/host/file/ | docker exec -i -t <container_id> bash -c "/bin/cat > /path/to/container/file"

ভাগ করা ডিরেক্টরি ব্যবহার করে ফাইলগুলি ভাগ করতে, প্রদত্ত আদেশটি টাইপ করে ধারকটি চালান:

# docker run -v /path/to/host/dir:/path/to/container/dir ...

দ্রষ্টব্য: কনটেইনার ব্যবহারকারীরা হোস্টের ব্যবহারকারীদের মতো না হওয়ায় অনুমতি নিয়ে সমস্যা দেখা দিতে পারে।


1
docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/
তদ্ব্যতীত

2
দ্রষ্টব্য যে catএটি একবার বেরোনোর ​​পরে শেষ হবে না। যদি এটি আপনার কাছে গুরুত্বপূর্ণ হয় (আপনি যদি ব্যাশ স্ক্রিপ্টগুলি অনুলিপি করছেন তবে ব্যাশ সেগুলি চালাতে অস্বীকার করবে), আপনার উল্লিখিত ফাইলটি ধারণ করে এমন প্রক্রিয়াটি চালানো lsof | grep yourfilenameএবং হত্যা করা উচিত cat
জোহান্দো

ধন্যবাদ! দুর্দান্ত টিপ। আপনি কি দয়া করে আমাকে বলতে পারেন কীভাবে এই কমান্ডটি একটি কমান্ড দিয়ে হত্যা করা যায়? কিছু একটা kill $(lsof | grep /path/to/file | sed ...)। আমি আপনার সাহায্যের জন্য কৃতজ্ঞ থাকব
মিক্ল

kill $(docker top CONTAINERNAME | sed -n '/cat$/p' | sed 's/^root[^0-9]\+\([0-9]\+\).*$/\1/')
মিক্ল

8

ডকার থেকে হোস্টে ডেটা অনুলিপি করার জন্য এটি হ'ল:

docker cp container_id:file path/filename /hostpath

docker cp a13fb9c9e674:/tmp/dgController.log /tmp/

হোস্ট থেকে ডকারে ডেটা অনুলিপি করার জন্য নীচে কমান্ডটি দেওয়া হয়েছে:

docker cp a.txt ccfbeb35116b:/home/

7

ডকার পরিবেশে, সমস্ত পাত্রে ডিরেক্টরিতে পাওয়া যায়:

/var/lib/docker/aufs/required-docker-id/

ধারকটির যে কোনও অংশে উত্স ডিরেক্টরি / ফাইল অনুলিপি করতে, প্রদত্ত আদেশটি টাইপ করুন:

sudo cp -r mydir/ /var/lib/docker/aufs/mnt/required-docker-id/mnt/


5

tarএবং docker cpডিরেক্টরিতে সমস্ত কিছু অনুলিপি করার জন্য একটি ভাল কম্বো।

ডেটা ভলিউম ধারক তৈরি করুন

docker create --name dvc --volume /path/on/container cirros

ডিরেক্টরি শ্রেণিবিন্যাস সংরক্ষণ করতে

tar -c -C /path/on/local/machine . | docker cp - dvc:/path/on/container

নিজের কাজের খোজ নাও

docker run --rm --volumes-from dvc cirros ls -al /path/on/container

5

হোস্টটি যদি সেন্টোস বা ফেডোরা হয় তবে একটি প্রক্সি নেই /var/lib/docker/aufs, তবে এটির অধীনে রয়েছে /proc:

cp -r /home/user/mydata/* /proc/$(docker inspect --format "{{.State.Pid}}" <containerid>)/root

এই সেন্টিমিডি dataডিরেক্টরি কন্টেন্টারে /আইডি "ধারকযুক্ত" দিয়ে অনুলিপি করবে ।


এটি রেডহাতের পক্ষে অনন্য নয়: এটি ডিবিয়ানও কাজ করে। (সম্ভবত সমস্ত Gnu / লিনাক্স সহ /proc)। কেবল রুট নয়, অন্য কোথাও ফাইল রাখার পথও প্রসারিত করুন।
ctrl-alt-delor

5

mycontainer@ H3nrik উত্তরের অর্থ কী তা আমার মতো কারও কাছে যদি এটি পরিষ্কার না হয় তবে এটি আসলে ধারক আইডি। একটি ফাইল কপি করার জন্য WarpSquare.mp4/app/example_scenes/1440p60একটি থেকে প্রস্থান Docker ধারক বর্তমান ফোল্ডার থেকে আমি এই ব্যবহৃত হয়।

docker cp `docker ps -q -l`:/app/example_scenes/1440p60/WarpSquare.mp4 .

যেখানে docker ps -q -lসর্বশেষ প্রস্থানিত দৃষ্টান্তের ধারক আইডিটি টান দেয়। যদি এটি কোনও বহির্গমন ধারক না হয় তবে আপনি এটি দ্বারা docker container lsবা এটি পেতে পারেনdocker ps


1
আপনি প্রস্থানিত পাত্রে আইডির তালিকা docker ps -aবা এর সাথে তালিকাভুক্ত করতে পারেন docker container ls -a
0x7d7b

4

এই প্রশ্নটি খুঁজে পাওয়া অনেকেই আসলে ফাইলগুলি তৈরি করার সময় ডকারের ছবিতে অনুলিপি করার সমস্যা থাকতে পারে (আমি করেছি)।

COPYসেক্ষেত্রে Dockerfile, আপনি চিত্রটি তৈরি করতে যে কমান্ডটি ব্যবহার করেন তাতে ব্যবহার করতে পারেন।

ডকুমেন্টেশন দেখুন


4

আপনি কেবল নিজের স্থানীয় মেশিনের আইপি ঠিকানাটি ব্যবহার করে ট্রেস করতে পারেন

ifconfig

তারপরে আপনার ডকার পাত্রে প্রবেশ করুন এবং টাইপ করুন

scp user_name@ip_address:/path_to_the_file destination

যে কোনও ক্ষেত্রে আপনার যদি এসএসএইচ ক্লায়েন্ট এবং সার্ভার ইনস্টল না থাকে তবে কেবল এটি ব্যবহার করে ইনস্টল করুন:

sudo apt-get install openssh-server

অনেক অনেক ধন্যবাদ, এটি আমার পক্ষে ভাল কাজ করেছে। এছাড়াও, আমি এটি অন্যান্য উপায়ে তুলনায় বেশি দক্ষ হিসাবে পেয়েছি
ব্যবহারকারী 1314742

এটি সুরক্ষার দিক থেকে একটি ভয়াবহ সমাধান।

4

টমক্যাট ধারক চালানোর সময় এটি একটি একক ফাইল অনুলিপি করার জন্য একটি অনলাইনার।

docker run -v /PATH_TO_WAR/sample.war:/usr/local/tomcat/webapps/myapp.war -it -p 8080:8080 tomcat

এটি যুদ্ধের ফাইলটি ওয়েব অ্যাপস ডিরেক্টরিতে অনুলিপি করবে এবং আপনার অ্যাপ্লিকেশনটি অকারণে চালিত করবে।


1
-v মাউন্ট করবে (অর্থাত্ একটি লিঙ্ক তৈরি করবে), অনুলিপি করবে না
ভিটিলিয় উলান্টিকভ

ফলাফলের পার্থক্যটি হ'ল মাউন্টিংটি পূর্ববর্তী ধারক সামগ্রীটি আড়াল করে, যেমন আপনি যদি কোনও ধারক ফোল্ডারে কোনও হোস্ট ফোল্ডারটি মাউন্ট করেন তবে আপনি আগের কনটেইনার ফোল্ডার সামগ্রীটি আর দেখতে পারবেন না
এমআরকিউ

4

ধারক আপ সিনট্যাক্স:

 docker run -v /HOST/folder:/Container/floder 

ডকার ফাইলে

COPY hom* /myFolder/        # adds all files starting with "hom"
COPY hom?.txt /myFolder/    # ? is replaced with any single character, e.g., "home.txt"

3

আমি যে পাত্রে পাই তা ফাইলগুলি অনুলিপি করার সর্বোত্তম উপায় হ'ল -vডকার রান কমান্ডের বিকল্পটি ব্যবহার করে হোস্টে একটি ডিরেক্টরি মাউন্ট করা ।


3

ভাল উত্তর আছে, কিন্তু খুব নির্দিষ্ট। docker psআপনার আগ্রহী কনটেইনার আইডি পাওয়ার ভাল উপায়টি আমি খুঁজে পেয়েছি Then তবে তা করুন

mount | grep <id>

ভলিউম মাউন্ট করা হয়েছে তা দেখতে। যে

/var/lib/docker/devicemapper/mnt/<id>/rootfs/

আমার জন্য, তবে এটি ওএস এবং কনফিগারেশনের উপর নির্ভর করে ভিন্ন পথ হতে পারে। এখন কেবল সেই পথে ফাইলগুলি অনুলিপি করুন।

ব্যবহার -vসর্বদা ব্যবহারিক নয়।


3

আমি সবেমাত্র ভিএলসি সংকলনের জন্য ডকার ব্যবহার শুরু করেছি, আপনি ধারকগুলি থেকে ফাইলগুলি অনুলিপি করার জন্য এখানে যা করতে পারেন তা এখানে:

su -
cd /var/lib/docker
ls -palR > /home/user/dockerfilelist.txt

এই txt এ একটি পরিচিত ফাইলের জন্য অনুসন্ধান করুন এবং আপনার ফোল্ডারটি থাকবে, এটিতে মূল এবং ভয়েলা হিসাবে সিডি হবে! আপনি চান সমস্ত অনুলিপি করুন।

এতে "মার্জড" এর সাথে কোনও পথ থাকতে পারে, আমি অনুমান করি যে আপনি এটিতে "ডিফার" দিয়েছিলেন want

এছাড়াও আপনি যদি ধারকটি থেকে প্রস্থান করেন এবং আপনি যেখানে রেখেছিলেন সেখানে ফিরে আসতে চাইলে:

docker ps -a
docker start -i containerid

আমি অনুমান করি যে আপনি যখন কোনও কমান্ডের মতো কোনও নামকরণ করেন নি তখন এটি কার্যকর f

docker run -it registry.videolan.org:5000/vlc-debian-win64 /bin/bash

নিশ্চিত হ্যাকার পদ্ধতি কিন্তু তাই কি!


3
docker cp SRC_PATH CONTAINER_ID:DEST_PATH

উদাহরণস্বরূপ, আমি আমার ফাইল এক্সএক্সএক্সএক্সএক্স / ডাউনলোড / জেনকিনস টমকাটে অনুলিপি করতে চাই

আমি কনটেইনার টমক্যাটের আইডি পেতে শুরু করি

docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
63686740b488        tomcat              "catalina.sh run"   12 seconds ago      Up 11 seconds       0.0.0.0:8080->8080/tcp   peaceful_babbage

docker cp xxxx/download/jenkins.war  63686740b488:usr/local/tomcat/webapps/

2

আমার প্রিয় পদ্ধতি:

কন্টেনারগুলি:

CONTAINER_ID=$(docker ps | grep <string> | awk '{ print $1 }' | xargs docker inspect -f '{{.Id}}')

file.txt যাও

mv -f file.txt /var/lib/docker/devicemapper/mnt/$CONTAINER_ID/rootfs/root/file.txt

অথবা

mv -f file.txt /var/lib/docker/aufs/mnt/$CONTAINER_ID/rootfs/root/file.txt

ডিভাইসম্যাপার পাথটি ফেকারে ডকার 1.6 সহ কাজ করছে বলে মনে হচ্ছে না। এটিকে একটি পৃথক প্রশ্ন, স্ট্যাকওভারফ্লো / প্রশ্ন / 29939419 /… হিসাবে রেখে দিয়েছেন , যে কোনও মন্তব্য প্রশংসিত হবে।
যোগেশ_ডি

2

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


এটি সুরক্ষা ঝুঁকির মতো এবং অ্যাক্সেসের দুঃস্বপ্নের অপেক্ষার মতো মনে হচ্ছে। আপনি কীভাবে আপনার চিত্র থেকে গিট সংগ্রহস্থলের অ্যাক্সেস সরবরাহ করবেন? এমনকি এটি ধরে নেওয়া যে এটি একটি সর্বজনীন ভাণ্ডার যা আপনি ধারক করতে চলেছেন আপনার ধারকটি সেই রেপোতে অ্যাক্সেস পেয়েছে।
tbm

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