কিভাবে ডকার পাত্রে একটি হোস্ট ডিরেক্টরি মাউন্ট করবেন


616

আমি হোস্ট ডিরেক্টরিটি একটি ডকার পাত্রে মাউন্ট করার চেষ্টা করছি যাতে হোস্টে করা কোনও আপডেট ডকারের পাত্রে প্রতিফলিত হয়।

কোথায় আমি কিছু ভুল করছি। আমি যা করেছি তা এখানে:

kishore$ cat Dockerfile

FROM ubuntu:trusty
RUN apt-get update
RUN apt-get -y install git curl vim
CMD ["/bin/bash"]
WORKDIR /test_container
VOLUME ["/test_container"]

kishore$ tree
.
├── Dockerfile
└── main_folder
    ├── tfile1.txt
    ├── tfile2.txt
    ├── tfile3.txt
    └── tfile4.txt

1 directory, 5 files kishore$ pwd /Users/kishore/tdock

kishore$ docker build --tag=k3_s3:latest .

Uploading context 7.168 kB
Uploading context
Step 0 : FROM ubuntu:trusty
 ---> 99ec81b80c55
Step 1 : RUN apt-get update
 ---> Using cache
 ---> 1c7282005040
Step 2 : RUN apt-get -y install git curl vim
 ---> Using cache
 ---> aed48634e300
Step 3 : CMD ["/bin/bash"]
 ---> Running in d081b576878d
 ---> 65db8df48595
Step 4 : WORKDIR /test_container
 ---> Running in 5b8d2ccd719d
 ---> 250369b30e1f
Step 5 : VOLUME ["/test_container"]
 ---> Running in 72ca332d9809
 ---> 163deb2b1bc5
Successfully built 163deb2b1bc5
Removing intermediate container b8bfcb071441
Removing intermediate container d081b576878d
Removing intermediate container 5b8d2ccd719d
Removing intermediate container 72ca332d9809

kishore$ docker run -d -v /Users/kishore/main_folder:/test_container k3_s3:latest c9f9a7e09c54ee1c2cc966f15c963b4af320b5203b8c46689033c1ab8872a0ea

kishore$ docker run -i -t k3_s3:latest /bin/bash

root@0f17e2313a46:/test_container# ls -al
total 8
drwx------  2 root root 4096 Apr 29 05:15 .
drwxr-xr-x 66 root root 4096 Apr 29 05:15 ..

root@0f17e2313a46:/test_container# exit exit

kishore$ docker -v
Docker version 0.9.1, build 867b2a9

  • আমি বুট 2 ডকার সংস্করণ চেক করতে জানি না

প্রশ্ন, সমস্যাগুলি:

  1. আমার কীভাবে ডক পাত্রের ভিতরে থাকা টেস্ট_কন্টেইনার ফোল্ডারে মেইন_ফোল্ডারটি লিঙ্ক করতে হবে?
  2. আমার এটি স্বয়ংক্রিয়ভাবে তৈরি করা দরকার। run -d -vকমান্ডটি ব্যবহার না করে আমি কীভাবে এটি করব ?
  3. বুট 2 ডকার ক্রাশ হলে কী হবে? ডকার ফাইলগুলি কোথায় সংরক্ষণ করা হয় (ডকফাইফাইল বাদে)?

2
এফওয়াইআই, এটি এই মন্তব্য হিসাবে ডক মধ্যে স্থির করা হয়েছে বলে মনে হচ্ছে। আমি আমার ম্যাক এ বুট 2 ডকার ব্যবহার করছি। আমি -v বিকল্পটি ব্যবহার করতে পারি এবং আমার স্থানীয় ডিরেক্টরিটি পুরো পাত্রে intoুকে পড়ে।
মার্কো

উত্তর:


506

আপনি এটি করতে পারেন এমন কয়েকটি উপায় রয়েছে। এটি করার সহজ উপায় হ'ল ডকফার্মিল ADDকমান্ডটি এর মতো ব্যবহার করা :

ADD . /path/inside/docker/container

তবে ডকফার্মিল তৈরি করার পরে হোস্টে এই ডিরেক্টরিতে করা কোনও পরিবর্তন পাত্রে প্রদর্শিত হবে না। এটি কারণ একটি ধারক তৈরি করার সময় ডকার ডিরেক্টরিটিকে একটিতে সংকুচিত করে .tarএবং সেই প্রসঙ্গে স্থায়ীভাবে কনটেইনারটিতে আপলোড করে

এটি করার দ্বিতীয় উপায়টি হ'ল আপনি চেষ্টা করেছেন যেটি একটি ভলিউম মাউন্ট করা। যথাসম্ভব পোর্টেবল হওয়ার চেষ্টা করার কারণে আপনি কোনও ডকফাইফিলের মধ্যে একটি ডকার কনটেইনার ডিরেক্টরিতে একটি হোস্ট ডিরেক্টরি মানচিত্র করতে পারবেন না, কারণ আপনি কোন মেশিনে চালাচ্ছেন তার উপর নির্ভর করে হোস্ট ডিরেক্টরিটি পরিবর্তন করতে পারে। একটি ডকার কনটেইনার ডিরেক্টরিতে একটি হোস্ট ডিরেক্টরি মানচিত্র করতে আপনার -vডক্কার রান ব্যবহার করার সময় পতাকাটি ব্যবহার করতে হবে :

docker run -v /host/directory:/container/directory -other -options image_name command_to_run

আমি এই কিশোর-ডকার-ভি / ইউজার / কিশোর / মেইনফোল্ডার: / টেস্ট_কন্টেইনার ডকার সংস্করণ 0.9.1 এর মতো চেষ্টা করেছি, 867 বি 2 এ কিশোর-ডকার রান-ভি / ইউজার / কিশোর / মেইন ফোল্ডার: / টেস্ট_কন্টেইনার ইউজ: ডকার রান [অপশন] কম্যান্ড] [এআরজি ...] নতুন পাত্রে একটি কমান্ড চালান -পি, --publish-all = মিথ্যা: হোস্ট ইন্টারফেসে সমস্ত উন্মুক্ত পোর্ট প্রকাশ করুন -a, --attach = []: স্টাডিন, স্টাডআউট বা সংযুক্ত করুন দ্বারা stderr। -সি, --cpu- শেয়ার = 0: সিপিইউ শেয়ার (আপেক্ষিক ওজন)
কিশোর বৈষ্ণব

2
আপনি উভয় যোগ করতে পারেন এবং -v ভলিউম একই সাথে মাউন্ট। হোস্ট মাউন্ট নির্দিষ্ট না করে ডিফল্ট অ্যাপ_ডির ব্যবহার করছেন?
alexzg

@ আলেক্সজগ আমি মনে করি না যে আমাদের কেবল প্রথমটিকে অগ্রাধিকার দেওয়া যেতে পারে। এছাড়াও, আমি আপনার ২ য় পয়েন্টের ডিফল্ট অ্যাপ_ডির ... হোস্ট মাউন্ট .. সম্পর্কে পরিষ্কার নই?
কিশোর বৈষ্ণব

35
এটি আমার জন্য ডকার-মেশিন এবং ভার্চুয়ালবক্স সহ ম্যাক ওএস এক্সে কাজ করেছিল। আমি একটি পরীক্ষা এবং ত্রুটির দ্বারা আবিষ্কার করেছি যে সতর্কতা হ'ল হোস্ট ডিরেক্টরিটি অবশ্যই একটি সম্পূর্ণ পথ হতে হবে এবং আপেক্ষিক পথ নয়।
jbustamovej

24
ADDআসলে "মাউন্টিং" নয় এটি ফাইলটিকে অনবরত ধারক করে রাখার ধারকটিতে অনুলিপি করে।
কেভ

200

এই প্রশ্নের ব্যবহারকারীর ব্যবহার ছিল Docker version 0.9.1, build 867b2a9, আমি আপনাকে ডকার সংস্করণ> = 17.06 এর জন্য একটি উত্তর দেব।

আপনি যা চান, স্থানীয় ডিরেক্টরিটি ধারক ডিরেক্টরিতে সিঙ্ক্রোনাইজ রাখুন, টাইপ সহ ভলিউম মাউন্ট করে সম্পন্ন হয় bind। এটি উত্স (আপনার সিস্টেম) এবং লক্ষ্যটিকে (ডকের ধারকটিতে) বাঁধাই করবে। এটি লিনাক্সে ডিরেক্টরি স্থাপন করার মতোই।

ডকার ডকুমেন্টেশন অনুসারে মাউন্ট করার উপযুক্ত কমান্ডটি এখন mountপরিবর্তে রয়েছে -v। এখানে এর ডকুমেন্টেশন:

  • --mount: একাধিক কী-মান জুটি সমন্বিত, কমা দ্বারা পৃথক। প্রতিটি কী / মান জোড় একটি <key>=<value>টিউপলের রূপ নেয় । --mountসিনট্যাক্স তুলনায় বাগাড়ম্বরপূর্ণ বেশি -vবা --volume, কিন্তু কী ক্রম গুরুত্বপূর্ণ নয়, এবং পতাকার মান বুঝতে করা সহজ।

  • typeমাউন্ট, যা হতে পারে এর bind, volumeঅথবা tmpfs(আমরা বাইন্ড ব্যবহার করতে যাচ্ছি )

  • দ্য sourceমাউন্ট। বাইন্ড মাউন্টগুলির জন্য, এটি ডকার ডেমন হোস্টের ফাইল বা ডিরেক্টরিতে যাওয়ার পথ। যেমন নির্দিষ্ট করা যেতে পারে sourceবা src

  • destinationএই ক্ষেত্রে মান হিসাবে পাথ যেখানে ফাইল অথবা ডাইরেক্টরি কন্টেইনারে মাউন্ট করা হবে না লাগে। হিসাবে নির্দিষ্ট করা যেতে পারেdestination , dstঅথবা target

সুতরাং, (ডিরেক্টরি) সহ /test_containerআমরা বর্তমান ডিরেক্টরিটি (উত্স) মাউন্ট করতে ব্যবহার করতে যাচ্ছি:

    docker run -it --mount src="$(pwd)",target=/test_container,type=bind k3_s3

যদি এই মাউন্ট প্যারামিটারগুলির ফাঁকা জায়গা থাকে তবে আপনার চারপাশে অবশ্যই উদ্ধৃতিগুলি রাখা উচিত। যখন আমি জানি তারা না, আমি ব্যবহার করব`pwd` পরিবর্তে :

    docker run -it --mount src=`pwd`,target=/test_container,type=bind k3_s3

আপনাকে ফাইল অনুমতি নিয়েও ডিল করতে হবে, এই নিবন্ধটি দেখুন


2
আমি তোমার উত্তরের করেছি upvoted কারণ আমি ভালোবাসি কিভাবে এটি সংক্ষিপ্ত হয় এবং এটি ভুল নয়, কিন্তু আপনি এটি আমার উত্তর আলোকে একটু আপডেট করতে চান হতে পারে stackoverflow.com/a/51829247/901899
rainabba

1
আমি অনুমান করি যে ডকুমেন্টেশনটি এই উত্তরটির পরে আপডেট করা হয়েছে, এখনই এটি মাউন্টগুলির চেয়ে ভলিউমের প্রস্তাব বলে মনে হচ্ছে। কোনও কিছুর প্রতিশ্রুতি দেওয়ার আগে যদিও তা মূল্যবান।
সিপ্টি

1
": @Sipty নিম্নলিখিত উল্লেখ করা হতে পারে আপনি নতুন Docker অ্যাপ্লিকেশন উন্নয়নশীল হয়, বিবেচনা ব্যবহার যদি নামে ভলিউম এর পরিবর্তে আপনি Docker CLI কমান্ড ব্যবহার করতে পারবেন না সরাসরি বেঁধে মাউন্ট পরিচালনা করতে।। "
Aluthren

81

ধারাবাহিকভাবে দুটি মাউন্টস: আমার ধারণা এখানে অনেকগুলি পোস্ট সম্ভবত দুটি বুট 2 ডকার ব্যবহার করছে, কারণ আপনি কিছুই দেখতে পাচ্ছেন না কারণ আপনি হোস্ট থেকে নয়, বুট 2 ডকার থেকে একটি ডিরেক্টরি মাউন্ট করছেন।

আপনার মূলত দুটি ক্রমাগত মাউন্টগুলি দরকার:

আপনার হোস্ট থেকে আপনার সিস্টেমে একটি ডিরেক্টরি মাউন্ট করার জন্য প্রথমটি

দ্বিতীয়টি নতুন ডিরেক্টরিটি আপনার কনটেইনার থেকে বুট 2 ডকার থেকে মাউন্ট করবে:

  • 1) স্থানীয় সিস্টেম মাউন্ট boot2docker

    sudo mount -t vboxsf hostfolder /boot2dockerfolder
    
  • 2) boot2dockerলিনাক্স ধারক উপর মাউন্ট ফাইল

    docker run -v /boot2dockerfolder:/root/containerfolder -i -t imagename
    

তারপরে আপনি যখন lsভিতরে containerfolderযাবেন তখন আপনার সামগ্রীটি দেখতে পাবেন hostfolder


1
সেরা উত্তর. আমি মাউন্ট এ (উইন্ডোজ অধীনে) হোস্টফোল্ডার যোগ করতে হবে কমান্ডের একটি ফোল্ডার ভাগ করে নেওয়ার নাম উল্লেখ করছে। net shareউইন্ডোজ টার্মিনাল (সেন্টিমিটার) এর ভিতরে একটি কমান্ডের সাথে প্রদর্শিত হবে । এবং আপনাকে সেইটিকে ভার্চুয়ালবক্স জিইউআইয়ের সাথে ভাগ করা ফোল্ডার হিসাবে যুক্ত করতে হবে (আপনি যদি আমার যুক্তি অনুসরণ করেন তবে একই নামটি ব্যবহার করছেন)। আপনি যদি এটিকে ভাগ করতে বাদ দেন তবে এটি কার্যকর হবে তবে অনুমতি এবং সমস্যাগুলি রিফ্রেশ করে আপনি সমস্যার মুখোমুখি হবেন।
কির কানোজ

মাউন্ট কমান্ড হোস্টকে / বুট 2 ডকফর্মোল্ডারটি কীভাবে জানতে পারে?
alfonsodev

আমি ত্রুটিটি পেয়েছি mount: unknown filesystem type 'vboxsf'
:,

"vboxsf" হ'ল ভার্চুয়ালবক্স শেয়ার্ড-ফোল্ডার "ফাইল সিস্টেম" ড্রাইভার। ভার্চুয়ালবক্স এক্সটেনশানগুলি ইনস্টল করে এটি অবশ্যই ভিএম এ কনফিগার করা উচিত। বুট 2 ডকার চিত্রটি অবশ্যই এগুলি ইনস্টল করা উচিত নয়। ভার্চুয়ালবক্সের ভার্চুয়াল ভলিউম হিসাবে ভার্চুয়ালবক্স সংযোজন আইএসও চিত্রগুলিকে "সন্নিবেশ" করতে একটি "ডিভাইস" ফাংশন রয়েছে। সাধারণত আপনি মাউন্ট / dev / cdrom / mnt ব্যবহার করে / mnt এ গিয়ে ব্যাশ VBoxLinuxAdditions চালিয়ে মাউন্টে এটি মাউন্ট করতে পারেন। এটিতে জিসিসি, কার্নেল বা অন্যান্য নির্ভরতা ইনস্টল করার প্রয়োজন হতে পারে।
অ্যান্ড্রু ওল্ফ

এমন কোন ফাইল বা ডিরেক্টরি: mount.vboxsf: মাউন্ট ত্রুটি সহ ব্যর্থ হয়েছে: কোন ফাইল বা ডিরেক্টরির মাউন্ট করুন: চালু / boot2dockerfolder মাউন্ট mymapfoldername ব্যর্থ
ভি

70

আপনি ক্লাইভ থেকে -v বিকল্প ব্যবহার করতে পারেন, এই সুবিধা ডকফাইফাইলের মাধ্যমে উপলব্ধ নয়

docker run -t -i -v <host_dir>:<container_dir> ubuntu /bin/bash

যেখানে হোস্ট_ডির হল হোস্ট থেকে ডিরেক্টরি যা আপনি মাউন্ট করতে চান। আপনার কন্টেইনার ডিরেক্টরি সম্পর্কে চিন্তা করার দরকার নেই যদি এটি উপস্থিত না থাকে তবে ডকার এটি তৈরি করবে।

হোস্ট মেশিন (হোস্ট মেশিনের আওতায়) থেকে হোস্ট_ডায়ারে কোনও পরিবর্তন করা গেলে এটি ধারক এবং বিপরীতে দৃশ্যমান হবে।


6
হোস্ট মাউন্ট বিকল্পটি চিত্রিত করার জন্য কী সুন্দর, পরিষ্কার, টু দ্য পয়েন্ট উদাহরণ। এটি সম্ভবত বাস্তব ডিরেক্টরি ব্যবহার করে উন্নত করা যেতে পারে: docker run -t -i -v /tmp:/tmp ubuntu /bin/bashযেখানে হোস্টটি /tmpধারকটিতে মাউন্ট করা হবে /tmp। এখন কেউ touch /tmp/hello-worldপাত্রে থেকে ফাইলটি হোস্টের মধ্যে উপস্থিত দেখতে পাবে।
স্টিফান হেনিংসেন 21

3
নিখুঁত কাজ করে। তবে এইভাবে মাউন্ট করা ডিরেক্টরি মালিককে রুট হিসাবে সেট করে এবং এটি ধারকটি রুট হিসাবে চালিত হবে ects কনটেইনারটি নন-রুট হিসাবে চালিত হলে আমরা কীভাবে দিরকে নন-রুট হিসাবে মাউন্ট করব?
অরুণ

33

এটি কি সম্ভব যে আপনি ওএস এক্সে ডকার ব্যবহার করেছেন boot2dockerবা এর মতোই কিছু।

আমি একই অভিজ্ঞতা করেছি - কমান্ডটি সঠিক তবে কিছুই (বুদ্ধিমান) কনটেইনারে মাউন্ট করা হয়নি, যাইহোক।

দেখা যাচ্ছে - এটি ইতিমধ্যে ডকার ডকুমেন্টেশনে ব্যাখ্যা করা হয়েছে । আপনি যখন টাইপ করেন docker run -v /var/logs/on/host:/var/logs/in/container ...তখন /var/logs/on/hostপ্রকৃতপক্ষে boot2dockerভিএম-চিত্র থেকে ম্যাপ করা হয় , আপনার ম্যাক নয়।

আপনাকে আপনার ভিএম এর মাধ্যমে ভাগ করা ফোল্ডারটি আপনার আসল হোস্টের কাছে পাইপ করতে হবে (আমার ক্ষেত্রে ম্যাক)।


1
ধন্যবাদ! এটি আমাকে একটি দূরবর্তী সম্পর্কিত সমস্যার সাথে সহায়তা করেছিল। ডকারের ভিতরে চলমান পোস্টগ্রিসগুলি লোকোহোস্টের মতো নয়, ভিবক্স আইপিতে আবদ্ধ ছিল, যেমন এটি ওএস এক্সে না চালানো থাকলে হবে
পিটার বেকিচ

2
ডকার ডকুমেন্টেশনের সেই ইউআরএল আর বৈধ নয়
ডিজিটালডিভেনিক

হাহা সর্বকালের সেরা রসিকতা .. তারা সত্যিই একটি ইঙ্গিত বা তাই করতে পারে।
ব্যবহারকারী 2834172

2
আপনার ডকুমেন্টেশনের লিঙ্কটি 404
ফ্যাক্টর মিস্টিক

3
প্রকৃত হোস্টে ভিএম এর মাধ্যমে ভাগ করা ফোল্ডারটি পাইপ করার উদাহরণ দেখতে আমি আগ্রহী।
ডেরেক

28

[আপডেট] ২০১ 2017 সালের ~ জুন, ম্যাকের জন্য ডকার এই সমস্ত বিরক্তিকর অংশের যত্ন নেয় যেখানে আপনাকে ভার্চুয়ালবক্সের সাথে ঝামেলা করতে হবে। এটি আপনাকে আপনার স্থানীয় হোস্টের /privateউপসর্গ ব্যবহার করে মূলত সমস্ত কিছু মানচিত্র করতে দেয় । আরও তথ্য এখানে[/হালনাগাদ]

সমস্ত বর্তমান উত্তরগুলি বুট 2 ডকার সম্পর্কে কথা বলে। যেহেতু এখন এটি ডকার-মেশিনের পক্ষে অবহেলা করা হয়েছে তাই এটি ডকার-মেশিনের পক্ষে কাজ করে:

প্রথমে ডকার-মেশিন ভিএম এ প্রবেশ করুন এবং ফোল্ডারটি তৈরি করুন যা আমরা ম্যাপিং করব:

docker-machine ssh $MACHINE_NAME "sudo mkdir -p \"$VOL_DIR\""

এখন ফোল্ডারটি ভার্চুয়ালবক্সে ভাগ করুন:

WORKDIR=$(basename "$VOL_DIR")
vboxmanage sharedfolder add "$MACHINE_NAME" --name "$WORKDIR" --hostpath "$VOL_DIR" --transient

অবশেষে, আবার ডকার-মেশিনে এসএসএস করুন এবং আমরা যে ফোল্ডারটি ভাগ করেছি সেটিকে মাউন্ট করুন:

docker-machine ssh $MACHINE_NAME "sudo mount -t vboxsf -o uid=\"$U\",gid=\"$G\" \"$WORKDIR\" \"$VOL_DIR\""

দ্রষ্টব্য: ইউআইডি এবং জিআইডি-র জন্য আপনি ইতিমধ্যে যতটা পূর্ণসংখ্যক ইতিমধ্যে গ্রহণ করা হয়নি সেগুলি ব্যবহার করতে পারেন।

এটি ওএস এক্স এল ক্যাপিটেনে ডকার-মেশিন 0.4.1 এবং ডকার 1.8.3 হিসাবে পরীক্ষা করা হয়।


1
+1 টি। বেশ কয়েক ঘন্টা আমার মাথা ঠাট্টা করার পরে, আপনার উত্তর কাজ করে। এটি docker-machineডকের অংশ হওয়া উচিত ।
অভিজিৎ সরকার

-vপতাকা ব্যবহার করবেন না কেন ?
ইগ্রাসিয়া

1
@ গ্রেসিয়া -vপতাকাটি ওএস এক্সের (বা উইন্ডোজ) আপনি যেমনটি আশা করেন তেমন কাজ করে না। ডকার একটি ভিএম-তে চালায় তাই ফোল্ডারটি ভিএম-র -vএকটি ফোল্ডারে পয়েন্ট হিসাবে উল্লেখ করা হয় , মূল ওএসে নয়। এই কৌশলটি ভিএম ফোল্ডারটি ম্যাসেজের পরবর্তী পদক্ষেপটি মূল ওএসে ফিরে আসে।
প্যাট্রিক গাউনসন

1
@ পেট্রিকগাউনসন আমার ক্ষেত্রে (ওএস এক্স) ফোল্ডারটি ভিএম-তে নয়, হোস্টে রয়েছে এবং এটি ঠিকঠাক কাজ করে। ডকার টোলগুলি এটি ভিএম এবং সেখান থেকে ধারকটিতে রফতানি করার যত্ন নেয়।
ইগ্রাসিয়া

1
আমি উল্লেখ করা নিয়মের একটি ব্যতিক্রম হ'ল ভিএম স্বয়ংক্রিয়ভাবে /Usersডকারে ভাগ করে নেওয়ার জন্য মাউন্ট করবে । তার মানে যদি আপনার ওয়ার্কিং ফাইলগুলি থাকে ~/*তবে আপনি যেতে ভাল। আপনার যদি ডান পরিবেশের সেটআপ শেষ হয়ে যায় /developmentবা /Usersআপনি যা করতে চান তবে অন্য কোনও সমস্যা হ'ল ডকস.ডকার
প্যাট্রিক

27

আমি আমার শারীরিক মেশিনটি পরিষ্কার রাখতে একটি ডকারের ধারকের ভিতরেই আমার সেলসজেএস অ্যাপটি চালানোর জন্য পরীক্ষা নিরীক্ষা করছি।

আমি আমার সেলসজেএস / নোডজেএস অ্যাপ্লিকেশনটিকে / অ্যাপের অধীনে মাউন্ট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করছি:

সিডি আমার_সোর্স_ কোড_ফোল্ডার
ডকার রান -ইট -পি 1337: 1337 -ভি $ (পিডব্লিউডি): / অ্যাপ্লিকেশন আমার_ডোকার / চিত্র_উত্তর_নোডিজস_ইটিক

5
কীভাবে ডকফাইফিল এ এটি করতে পারে?
ওরাড

23
docker run -v /host/directory:/container/directory -t IMAGE-NAME /bin/bash

docker run -v /root/shareData:/home/shareData -t kylemanna/openvpn /bin/bash

আমার সিস্টেমে আমি উত্তরটি nhjk থেকে সংশোধন করেছি, আপনি -tপতাকা যুক্ত করার সময় এটি নির্দোষ কাজ করে ।


আপনি কি স্থানীয় এফএস থেকে ফাইলগুলি তৈরি / আপডেট করতে এবং ডকারের ধারকটির ভিতরে পরিবর্তনগুলি দেখতে সক্ষম?
অভি মেহেনওয়াল

14

হোস্ট যদি উইন্ডোজ 10 হয় তবে ফরোয়ার্ড স্ল্যাশের পরিবর্তে পিছনের স্ল্যাশ ব্যবহার করুন -

docker run -it -p 12001:80 -v c:\Users\C\Desktop\dockerStorage:/root/sketches

হোস্ট ড্রাইভ ভাগ করা হয়েছে তা নিশ্চিত করুন (এক্ষেত্রে সি)। আমার ক্ষেত্রে উপরের কমান্ডটি চালানোর পরে শেয়ারের অনুমতি চেয়ে আমি একটি প্রম্পট পেয়েছি।


13

ম্যাক ওএসে, /Users/<name>/projects/আপনার ধারকটির মূলে আপনার ম্যাকের একটি ফোল্ডার মাউন্ট করতে :

docker run -it -v /Users/<name>/projects/:/projects <container_name> bash

ls /projects


11

জুলাই 2015 আপডেট - বুট 2 ডকার এখন সরাসরি মাউন্টিং সমর্থন করে। -v /var/logs/on/host:/var/logs/in/containerডাবল মাউন্ট না করেই আপনি সরাসরি আপনার ম্যাক প্রম্পট থেকে ব্যবহার করতে পারেন


11

জন্য উইন্ডোজ 10 ব্যবহারকারীদের এটা ভিতরে মাউন্ট পয়েন্ট আছে গুরুত্বপূর্ণ C:/Users/ডিরেক্টরি। আমি এটি কাজ পেতে কয়েক ঘন্টা চেষ্টা করেছি। এই পোস্টে সহায়তা করেছে তবে এটি প্রথমে স্পষ্ট ছিল না কারণ উইন্ডোজ 10 এর সমাধান হ'ল একটি গৃহীত উত্তরের মন্তব্য। এটি আমি এটি করেছিলাম:

docker run -it -p 12001:80 -v //c/Users/C/Desktop/dockerStorage:/root/sketches \
<your-image-here> /bin/bash

তারপরে এটি পরীক্ষা করতে, আপনি echo TEST > hostTest.txtনিজের ইমেজের অভ্যন্তরে এটি করতে পারেন । আপনার স্থানীয় হোস্ট ফোল্ডারে এই নতুন ফাইলটি দেখতে পারা উচিত C:/Users/C/Desktop/dockerStorage/


পথে ডাবল স্ল্যাশগুলিই এটি আমার পক্ষে কাজ করে। এটি বিভ্রান্তিকর কারণ আমি -v $(pwd):/var/xxপ্রথমে ব্যবহার করেছি এবং এটি কাজ করেছিল তবে ফলশ্রুতিতে একটি খালি ডিরেক্টরি তৈরি হয়েছিল। আমি বাবুন হয়ে সাইগ চালাচ্ছি।
কেনেচিলদা

উইন্ডোজ in তে / সি / ডেটা / ব্যবহার করার সময় একই সমস্যা ছিল, হোস্ট ডিরেক্টরিটিকে / সি / ব্যবহারকারী / <ব্যবহারকারী> এর অধীনে সরিয়ে / আমার জন্য এটি সমাধান করে। ধন্যবাদ।
ব্যবহারকারী 8675309

1
আমাদের কি পোস্টটির একটি লিঙ্ক থাকতে পারে যা আপনাকে সমস্যার সমাধান করতে সহায়তা করেছে?
পিবিও

11

আমি একই সমস্যা হয়েছে। আমার কমান্ড লাইনটি দেখতে এমন দেখাচ্ছে:

docker run --rm -i --name $NAME -v `pwd`:/sources:z $NAME

সমস্যা ছিল 'পিডাব্লুডিতে' নিয়ে। সুতরাং আমি এটিকে $ (পিডাব্লুডিতে) করেছিলাম:

docker run --rm -i --name $NAME -v $(pwd):/sources:z $NAME

1
কিসের zজন্য?
এইচ এইচ

2
Z বিকল্পটি ইঙ্গিত দেয় যে বাইন্ড মাউন্ট সামগ্রীটি একাধিক পাত্রে ভাগ করা হয়।
জেসন

10

18-সিইয়ের ডকার হিসাবে, আপনি docker run -v /src/path:/container/pathকোনও হোস্ট ফোল্ডারের 2-উপায় বাঁধাই করতে ব্যবহার করতে পারেন ।

যদিও আপনি উইন্ডোজ 10 / ডাব্লুএসএল এর সাথে কাজ করছেন এবং আপনার হোস্ট হিসাবে উইন্ডোজের জন্য ডকার-সিই এবং তারপরে ডাব্লুএসএলে ডকার-সিই ক্লায়েন্ট সরঞ্জামগুলি রয়েছে তবে এখানে একটি বড় ক্যাচ রয়েছে। ডাব্লুএসএল পুরো / ফাইল সিস্টেম সম্পর্কে জানেন যখন আপনার উইন্ডোজ হোস্টটি কেবল আপনার ড্রাইভগুলি সম্পর্কে জানে। ডাব্লুএসএল এর ভিতরে আপনি / এমএনটি / সি / প্রোজেক্টপথ ব্যবহার করতে পারেন, তবে আপনি যদি চেষ্টা করেনdocker run -v ${PWD}:/projectpath হোস্টে দেখতে পাবেন যে / প্রকল্পপথটি ফাঁকা আছে কারণ হোস্ট / এমএনটিতে কিছুই নেই।

আপনি যদি / সি / প্রোজেক্টপথ থেকে এবং ততক্ষণ কাজ করেন docker run -v ${PWD}:/projectpathএবং আপনি দেখতে পাবেন যে ধারকটিতে / প্রকল্পপথটি রিয়েলটাইমে প্রতিচ্ছবি / সি / প্রকল্পপথটি প্রতিফলিত করবে। আপনার অতিথির ভিতরে খালি মাউন্টগুলি ছাড়া এই সমস্যাটি সনাক্ত করার জন্য কোনও ত্রুটি বা অন্য কোনও উপায় নেই।

আপনার অবশ্যই উইন্ডোজ সেটিংসের জন্য ডকারে "ড্রাইভটি ভাগ করে নিতে" নিশ্চিত হওয়া উচিত।


উইন 10 / ডাব্লুএসএল এবং ডকার-সিই / ডকার-সিই নিয়ে আমার এই সমস্যা হচ্ছে। খালি / প্রকল্পপথ /। "/ সি / প্রকল্পপথ থেকে কাজ" বলতে কী বোঝ? আমি / সি / থেকে / এমএনটি / সি লিঙ্ক করার চেষ্টা করে চলেছি /c/projectpathতবে ত্রুটি পেয়েছি bind mount source path does not exist: /host_mnt/c/projectpath
স্টিভেন টি স্নাইডার

এই লিঙ্কটি আমার সমস্যার সমাধান করেছে: সমর্থন.divio.com/local-development/docker/… (উইন্ডোজের ডকার কেবলমাত্র ব্যবহারকারী / ব্যবহারকারীদের থেকে / ডিফল্টরূপে মাউন্ট করার অনুমতি দেয়)
স্টিভেন টি স্নাইডার

7

আমি দেখেছি যে কোনো ডিরেক্টরির মত সিস্টেম নির্দেশ অধীনে ডিম্বপ্রসর /var, /usr,/etc ধারক অধীন নয় মাউন্ট করা যায়নি।

নির্দেশটি ব্যবহারকারীর স্পেস -vস্যুইচটিতে থাকা উচিত ডকার ডেমনকে স্থানীয় ডিরেক্টরিটি ধারকটিতে মাউন্ট করার নির্দেশ দেয়: উদাহরণস্বরূপ:

docker run -t -d -v /{local}/{path}:/{container}/{path} --name {container_name} {imagename}

5

ভার্টুয়ালবক্স গেস্ট অ্যাডিশনগুলির সাথে বুট 2 ডকার একসাথে
কীভাবে / ব্যবহারকারীদের বুট 2 ডকারে মাউন্ট করবেন

https://medium.com/boot2docker-lightweight-linux-for-docker/boot2docker-together-with-virtualbox-guest-additions-da1e3ab2465c

tl; dr ভার্চুয়ালবক্স অতিথি সংযোজনাসহ আপনার নিজস্ব কাস্টম বুট 2 ডকার.আইসো তৈরি করুন ( লিঙ্কটি দেখুন ) বা http://static.dockerfiles.io/boot2docker-v1.0.1-virtualbox-guest-additions-v4.3.12.iso ডাউনলোড করুন এবং এটি সংরক্ষণ করুন ~ / .boot2docker / boot2docker.iso- এ।


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

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

দ্রষ্টব্য: -v আর্গুমেন্টটি বুট 2 ডকারের মাধ্যমে কাজ না করার কারণ এটি সম্ভবত বুট 2 ডকার-ভিএম এ মাউন্ট করার সাথে আপনার আসল হোস্টের সাথে করার মতো কিছু নয়। যে কারণে আমি অনুমান করি Vboxmanage অংশ এটি কাজ করতে সাহায্য করে।
এমিল

5

আমি কীভাবে ডকের পাত্রে থাকা অভ্যন্তরের টেস্ট_কন্টেইনার ফোল্ডারের সাথে মেইন_ফোল্ডারটিকে লিঙ্ক করব?

নীচে আপনার কমান্ডটি সঠিক, যদি না আপনি কোনও ম্যাকতে বুট 2 ডকার ব্যবহার করেন (ভবিষ্যতের আপডেটের উপর নির্ভর করে) যে ক্ষেত্রে আপনি ফোল্ডারটি খালি দেখতে পাচ্ছেন। এটি সংশোধন করার জন্য একটি টিউটোরিয়ালের জন্য ম্যাটের উত্তর দেখুন।

docker run -d -v /Users/kishore/main_folder:/test_container k3_s3:latest

আমাকে এই রানটি স্বয়ংক্রিয়ভাবে করা দরকার, কীভাবে সত্যিই রান-ডি-ভি কমান্ড ব্যবহার না করে এটি করা যায়।

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

বুট 2 ডকার ক্রাশ হলে কী হবে? ডকার ফাইলগুলি কোথায় সংরক্ষণ করা হয়?

আপনি যদি -v আরগ ব্যবহার করতে এবং হোস্ট মেশিনিকে রেফারেন্স করতে পরিচালনা করেন তবে ফাইলগুলি আপনার হোস্টে নিরাপদ থাকবে।

যদি আপনি 'ডকার বিল্ড-মাইমেজ ব্যবহার করেন'। একটি ডকফাইফাইলের সাহায্যে আপনার ফাইলগুলি চিত্রটিতে বেক করা হবে।

আমার বিশ্বাস, আপনার ডকারের চিত্রগুলি বুট 2 ডকার-ভিএম এ সঞ্চিত আছে। আমি যখন ভার্চুয়ালবক্স থেকে ভিএম মুছে ফেললাম তখন আমার চিত্রগুলি অদৃশ্য হয়ে গেল আমি এটি খুঁজে পেয়েছি। (দ্রষ্টব্য, ভার্চুয়ালবক্স কীভাবে কাজ করে তা আমি জানি না, সুতরাং চিত্রগুলি অন্য কোথাও লুকিয়ে থাকতে পারে, ডকারের কাছে দৃশ্যমান নয়)।


5

একই সমস্যা ছিল। এটি ডকার ডকুমেন্টেশনে পাওয়া গেছে :

দ্রষ্টব্য: হোস্ট ডিরেক্টরিটি তার প্রকৃতির দ্বারা, হোস্ট-নির্ভর। এই কারণে, আপনি ডকফাইফাইল থেকে কোনও হোস্ট ডিরেক্টরিটি মাউন্ট করতে পারবেন না, ভলিউম নির্দেশ কোনও হোস্ট-ডায়র পাস করা সমর্থন করে না, কারণ নির্মিত চিত্রগুলি পোর্টেবল হতে হবে। সমস্ত সম্ভাব্য হোস্টগুলিতে একটি হোস্ট ডিরেক্টরি উপলব্ধ হবে না।

সুতরাং, পাঠানো / লেখার হোস্ট ডিরেক্টরিটি মাউন্ট করা কেবলমাত্র কমান্ডের -vপ্যারামিটার দিয়েই সম্ভব docker run, অন্য উত্তরগুলি সঠিকভাবে নির্দেশ করে।


হোস্ট ডিরেক্টরি ঠিক কি?
নিকোলাস এস এক্সু

@ নিকোলাসএস.এক্সু আসল ডকার হোস্ট মেশিনের কোনও পথ।
জে স্কট এলব্লিন

5

উইন্ডোজ পাথ সহ এখানে একটি উদাহরণ রয়েছে:

docker run -P -it --name organizr --mount src="/c/Users/MyUserName/AppData/Roaming/DockerConfigs/Organizr",dst=/config,type=bind organizrtools/organizr-v2:latest

একটি পার্শ্ব নোট হিসাবে, এই চুল টানানোর সময়, নির্ণয়ের সাথে কুস্তিগী হওয়া এবং বার বার বার বার পুনরায় টাইপ করার সময়, আমি AutoHotkeyএকটি উইন্ডোজ পাথকে "ডকার উইন্ডোজ" এ রূপান্তর করতে একটি ছোট স্ক্রিপ্টকে চাবুক ফাটিয়ে ফেলার সিদ্ধান্ত নিয়েছি " ফর্ম্যাটেড পাথে । এইভাবে আমাকে যা করতে হবে তা হ'ল যে কোনও উইন্ডোজ পাথ যা আমি ক্লিপবোর্ডে মাউন্ট পয়েন্ট হিসাবে ব্যবহার করতে চাইছি তা অনুলিপি করা, কীবোর্ডের "অ্যাপস কী" টিপুন এবং এটি এটিকে এমন একটি বিন্যাসে ফর্ম্যাট করবে যা ডকার প্রশংসা করে।

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

এটি আপনার ক্লিপবোর্ডে অনুলিপি করুন:

C:\Users\My PC\AppData\Roaming\DockerConfigs\Organizr

কমান্স Apps Key-লাইনে কার্সারটি আপনি যেখানে চান সেখানে চাপুন এবং এটি এটি এখানে আটকানো হবে:

"/c/Users/My PC/AppData/Roaming/DockerConfigs/Organizr"

আমার জন্য অনেক সময় সাশ্রয় করে। এখানে এটি অন্য যে কারও পক্ষে এটি দরকারী মনে হতে পারে।

; --------------------------------------------------------------------------------------------------------------
;
; Docker Utility: Convert a Windows Formatted Path to a Docker Formatter Path
;                   Useful for (example) when mounting Windows volumes via the command-line.
;
; By:       J. Scott Elblein
; Version:  1.0
; Date:     2/5/2019
;
; Usage:    Cut or Copy the Windows formatted path to the clipboard, press the AppsKey on your keyboard
;           (usually right next to the Windows Key), it'll format it into a 'docker path' and enter it
;           into the active window. Easy example usage would be to copy your intended volume path via
;           Explorer, place the cursor after the "-v" in your Docker command, press the Apps Key and
;           then it'll place the formatted path onto the line for you.
;
; TODO::    I may or may not add anything to this depending on needs. Some ideas are:
;           
;           - Add a tray menu with the ability to do some things, like just replace the unformatted path
;               on the clipboard with the formatted one rather than enter it automatically.
;           - Add 'smarter' handling so the it first confirms that the clipboard text is even a path in
;               the first place. (would need to be able to handle Win + Mac + Linux)
;           - Add command-line handling so the script doesn't need to always be in the tray, you could
;               just pass the Windows path to the script, have it format it, then paste and close.
;               Also, could have it just check for a path on the clipboard upon script startup, if found
;               do it's job, then exit the script.
;           - Add an 'all-in-one' action, to copy the selected Windows path, and then output the result.
;           - Whatever else comes to mind.
;
; --------------------------------------------------------------------------------------------------------------

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%

AppsKey::

    ; Create a new var, store the current clipboard contents (should be a Windows path)
    NewStr := Clipboard

    ; Rip out the first 2 chars (should be a drive letter and colon) & convert the letter to lowercase
    ; NOTE: I could probably replace the following 3 lines with a regexreplace, but atm I'm lazy and in a rush.
    tmpVar := SubStr(NewStr, 1, 2)
    StringLower, tmpVar, tmpVar

    ; Replace the uppercase drive letter and colon with the lowercase drive letter and colon
    NewStr := StrReplace(NewStr, SubStr(NewStr, 1, 2), tmpVar)

    ; Replace backslashes with forward slashes
    NewStr := StrReplace(NewStr,  "\", "/")

    ; Replace all colons with nothing
    NewStr := StrReplace(NewStr, ":", "")

    ; Remove the last char if it's a trailing forward slash
    NewStr :=  RegExReplace(NewStr, "/$")

    ; Append a leading forward slash if not already there
    if RegExMatch(NewStr, "^/") == 0
        NewStr :=  "/" . NewStr

    ; If there are any spaces in the path ... wrap in double quotes
    if RegExMatch(NewStr, " ") > 0
        NewStr :=  """" . NewStr . """"

    ; Send the result to the active window
    SendInput % NewStr 

4

উইন্ডোজ 10 এ কাজ করার জন্য আমাকে সিস্টেম ট্রে থেকে ডকার সেটিংস উইন্ডোটি খুলতে হবে এবং ভাগ করা ড্রাইভিস বিভাগে যেতে হয়েছিল ।

আমি তার পরে বাক্সটি চেক করেছিলাম C। ডকার আমার ব্যবহারকারীদের ফোল্ডারে লেখার জন্য অনুমোদন পাওয়ার জন্য আমার ডেস্কটপ শংসাপত্রগুলির জন্য বলেছিলেন।

তারপরে আমি উপরের উদাহরণগুলি অনুসরণ করে ডকার কনটেইনারটি চালিয়েছিলাম এবং সেটিংস পৃষ্ঠায় উদাহরণটিও, /dataপাত্রে সংযুক্ত করে ।

docker run -v c:/Users/<user.name>/Desktop/dockerStorage:/data -other -options

3

নোট করুন যে উইন্ডোজে আপনাকে পরম পথ প্রদান করতে হবে।

নীচে আমার জন্য কাজ করেছেন।

docker run -t -i -v D:/projects/:/home/chankeypathak/work -p 8888:8888 jupyter/tensorflow-notebook /bin/bash

3

আমার একই সমস্যা ছিল, আমি সি: \ ব্যবহারকারীদের \ ফোল্ডারটিকে ডকারে মাউন্ট করার চেষ্টা করছিলাম
আমি কীভাবে এটি করলাম ডকার টুলবক্স কমান্ড লাইন

 $ docker run -it --name <containername> -v /c/Users:/myVolData <imagename>

2

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


2

আপনি ভিন্ন ভিজ্যুয়াল অভিজ্ঞতার জন্য পোর্টেইনার ওয়েব অ্যাপ্লিকেশন দিয়ে এটিও করতে পারেন ।

প্রথমে পোর্টেইনার চিত্রটি টানুন:

docker pull portainer/portainer

তারপরে পোর্টেইনারের জন্য একটি ভলিউম তৈরি করুন:

docker volume create portainer_data

একটি পোর্টেইনার ধারকও তৈরি করুন:

docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

আপনি এই URL- এ আপনার ব্রাউজারের সাথে ওয়েব অ্যাপ্লিকেশনটি অ্যাক্সেস করতে সক্ষম হবেন: " http: // লোকালহোস্ট: 9000 "। প্রথম লগইনে আপনাকে আপনার পোর্টেইনার অ্যাডমিন শংসাপত্রগুলি সেট করতে অনুরোধ জানানো হবে।

ওয়েব অ্যাপ্লিকেশনগুলিতে, এই মেনুগুলি এবং বোতামগুলি অনুসরণ করুন: (ধারক> ধারক যুক্ত করুন> সেটিংস পূরণ করুন > ধারক স্থাপন করুন)

পোর্টাইনারের সাথে "মাউন্ট" ভলিউম তৈরি করতে আমার সমস্যা হয়েছিল এবং আমি বুঝতে পেরেছিলাম যে আমার ধারকটির ভলিউম তৈরি করার সময় আমাকে "বাইন্ড" ক্লিক করতে হয়েছিল। নীচে ভলিউম বাইন্ডিং সেটিংসের একটি চিত্র যা আমার ধারক তৈরির জন্য হোস্টের সাথে বাঁধা মাউন্ট ভলিউম সহ কাজ করেছিল।

ভলিউম বাইন্ডিং সেটিংস

PS: আমি ডকার 19.035 এবং পোর্টেইনার 1.23.1 ব্যবহার করছি

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