hub - what is docker




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

খুব সহজ

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

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

    docker build .
    

আমি একটি ব্যাকআপ নির্মাণ এবং ডকার কনটেইনারগুলির জন্য সমাধান পুনরুদ্ধার করার চেষ্টা করছি যা আমরা দিয়ে কাজ করি।

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

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

আমি হোস্ট থেকে কনটেটারে ফাইল কপি করতে পারি?


  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

আপনি যদি চলমান কন্টেইনারে এটি করতে চান তবে আপনি ডকার কার্যকর ব্যবহার করতে পারেন (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

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

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

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

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

$ docker exec -it elated_hodgkin /bin/bash
[email protected]:/# ls /var/www
file1  file2

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

ifconfig

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

scp [email protected]_address:/path_to_the_file destination

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

sudo apt-get install openssh-server

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

এই সহজ docker cp এই কাজটি সমাধান।

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

কিভাবে container_name পেতে?

 docker ps 

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


আমি মাউন্ট করব এবং তারপর একটি ডেমোনের সাথে চিত্রটি চালাও, এখানে দেওয়া যেকোনো একটি হিসাবে;

docker run -d -v /blah1/blah2:/mnt --name mntcontainer ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

তারপর

docker exec -it mntcontainer bash

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

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

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

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

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

আপনি যদি এটি পছন্দ করেন না এবং আপনি ইতিমধ্যে আপনার তৈরি এবং চলমান ধারক মধ্যে তথ্য ভলিউম চান, তাহলে বিনোদন আজ আপনার একমাত্র বিকল্প। আমি কিভাবে একটি বিদ্যমান ডকার কনটেইনার একটি ভলিউম যোগ করতে পারেন?


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

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

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

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


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

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

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

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

কনজিওনার আইডি পেতে, প্রদত্ত কমান্ড টাইপ করুন:

docker ps

উপরের কন্টেন্ট docker.com থেকে নেওয়া হয়।


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

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

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


কনটেইনার হোস্ট মেশিন থেকে কোথায় অবস্থিত সেখান থেকে আমি সরাসরি ফাইলটি অনুলিপি করি।

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

প্রথম কন্টেইনার আইডি খুঁজে বের করুন:

[email protected]**3aed62678d54**:/home#

এবং তারপর হোস্ট থেকে, ফাইলটি হোম ডিরেক্টরিতে বলুন:

[email protected]:/home/dnepangue# cp cheering_nasa.gif /var/lib/docker/aufs/mnt/**3aed62678d54**a5df47a4a00a58bb0312009c2902f8a37498a1427052e8ac454b/home/

কন্টেইনারে ফিরে যাও ...

[email protected]**3aed62678d54**:/home# ls cheering_nasa.gif

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

{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

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


ধারক অনুমান করা হচ্ছে ইতিমধ্যে, চলমান কমান্ডটি টাইপ করুন:

# 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 ...

দ্রষ্টব্য: অনুমতিগুলির সমস্যাগুলি উত্থাপিত হতে পারে কারণ কন্টেইনারের ব্যবহারকারী হোস্টের ব্যবহারকারীর মতো নয়।


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

mount | grep <id>

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

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

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

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


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

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

যেখানে docker ps -q -l শেষ exited উদাহরণের ধারক আইডি আপ pulls। যদি এটি একটি বহির্মুখী ধারক না হয় তবে আপনি এটি docker container ls বা docker ps দ্বারা পেতে পারেন


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

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

[email protected]:/root#  <-- get the container ID

হোস্ট থেকে

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

ফাইলটি সরাসরি সিস্টেমে কপি করা হবে যেখানে কন্টেইনার ফাইল সিস্টেমে বসবে।


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

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

এই cmd আইডি "containerid" আইডি সঙ্গে কন্টেইনারে data ডিরেক্টরি সব কপি করবে।


cp কমান্ড ফাইল কপি করতে ব্যবহার করা যেতে পারে। একটি নির্দিষ্ট ফাইল কপি করা যেতে পারে:

docker cp foo.txt mycontainer:/foo.txt
docker cp mycontainer:/foo.txt foo.txt

জোর mycontainer জন্য, mycontainer কন্টেইনারটি একটি ধারক আইডি, একটি চিত্র আইডি নয়।

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

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

রেফারেন্স: cp জন্য ডকার CLI ডক্স

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


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





docker-container