কীভাবে ডকার মেশিনে স্থানীয় ভলিউম মাউন্ট করবেন


86

আমি ডকার-কমপোজ সহ ডকার-মেশিন ব্যবহার করার চেষ্টা করছি। ফাইল ডকার-কমপোজ.আইএমএল এর নিম্নলিখিত সংজ্ঞা রয়েছে:

web:
  build: .
  command: ./run_web.sh
  volumes:
    - .:/app
  ports:
    - "8000:8000"
  links:
    - db:db
    - rabbitmq:rabbit
    - redis:redis

যখন চলমান docker-compose up -dসব ভাল কমান্ড প্রয়োগ করার চেষ্টা পর্যন্ত যায় এবং একটি ত্রুটি উৎপন্ন হয়:

ধারক b58e2dfa503b696417c1c3f49e2714086d4e9999bd71915a53502cb6ef43936d: [8] সিস্টেম ত্রুটি: এক্সিকিউট: "./run_web.sh": স্ট্যাট।

স্থানীয় ভলিউমগুলি দূরবর্তী মেশিনে মাউন্ট করা হয় না। ওয়েব অ্যাপসের কোড দিয়ে স্থানীয় ভলিউম মাউন্ট করার প্রস্তাবিত কৌশল কী?


প্রকল্পের কাঠামো এবং ডকার-কমপোজ.আইএমএল এই টিউটোরিয়ালটির সমতুল্য syncano.com/…
jdcaballerov

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

উত্তর:


93

ডকার-মেশিন ব্যবহারকারীদের ডিরেক্টরিটি স্বয়ংক্রিয় করে তোলে ... তবে কখনও কখনও এটি যথেষ্ট হয় না।

আমি ডকার 1.6 সম্পর্কে জানি না, তবে 1.8 এ আপনি ডকার-মেশিনে একটি অতিরিক্ত মাউন্ট যুক্ত করতে পারেন

ভার্চুয়াল মেশিন মাউন্ট পয়েন্ট যুক্ত করুন (অংশ 1)

CLI : (কেবল তখনই কাজ করে যখন মেশিন বন্ধ থাকে)

VBoxManage sharedfolder add <machine name/id> --name <mount_name> --hostpath <host_dir> --automount

উইন্ডোজ একটি উদাহরণ হতে হবে

/c/Program\ Files/Oracle/VirtualBox/VBoxManage.exe sharedfolder add default --name e --hostpath 'e:\' --automount

জিইউআই : (মেশিনটি থামানোর দরকার নেই)

  1. "ওরাকল ভিএম ভার্চুয়ালবক্স পরিচালক" শুরু করুন
  2. ডান-ক্লিক <machine name>(ডিফল্ট)
  3. সেটিংস...
  4. যৌথরূপে ব্যবহৃত ফোল্ডার
  5. ডানদিকে ফোল্ডার + আইকন (ভাগ করুন যোগ করুন)
  6. ফোল্ডার পাথ: <host dir>(ই :)
  7. ফোল্ডারের নাম: <mount name>(ঙ)
  8. "অটো-মাউন্ট" এবং "স্থায়ী করুন" পরীক্ষা করুন (আপনি চাইলে কেবল পড়ুন ...) (অটো-মাউন্টটি বর্তমানে অর্থহীন ধরণের ...)

বুট 2 ডকারে মাউন্ট করা (অংশ 2)

ম্যানুয়ালি বুট 2 ডকারে মাউন্ট করুন :

  1. লগ ইন করার বিভিন্ন উপায় আছে, "ওরাকল ভিএম ভার্চুয়ালবক্স ম্যানেজার" এ "শো" ব্যবহার করুন, বা আইপি ঠিকানার মাধ্যমে এসএসএস / পুট্টি ডকারে রেখে দিন docker-machine ip default...
  2. sudo mkdir -p <local_dir>
  3. sudo mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` <mount_name> <local_dir>

আপনি মেশিনটি পুনরায় চালু না করা পর্যন্ত এটি কেবলমাত্র ভাল এবং তারপরে মাউন্টটি হারিয়ে যাবে ...

বুট 2 ডকারে একটি স্বতঃমাউন্ট যোগ করা হচ্ছে :

মেশিনে লগ ইন করার সময়

  1. সম্পাদনা করুন / তৈরি করুন (রুট হিসাবে) /mnt/sda1/var/lib/boot2docker/bootlocal.sh, এসডিএ 1 আপনার জন্য আলাদা হতে পারে ...
  2. অ্যাড

    mkdir -p <local_dir>
    mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` <mount_name> <local_dir>
    

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


পুরানো পদ্ধতি: কম প্রস্তাবিত , তবে বিকল্প হিসাবে রেখে দেওয়া হয়েছে

  • সম্পাদনা করুন (রুট হিসাবে) /mnt/sda1/var/lib/boot2docker/profile, এসডিএ 1 আপনার জন্য আলাদা হতে পারে ...
  • অ্যাড

    add_mount() {
      if ! grep -q "try_mount_share $1 $2" /etc/rc.d/automount-shares ; then
        echo "try_mount_share $1 $2" >> /etc/rc.d/automount-shares
      fi
    }
    
    add_mount <local dir> <mount name>
    

শেষ অবলম্বন হিসাবে , আপনি কিছুটা আরও ক্লান্তিকর বিকল্পটি নিতে পারেন এবং আপনি কেবল বুট চিত্রটি পরিবর্তন করতে পারেন।

  • git -c core.autocrlf=false clone https://github.com/boot2docker/boot2docker.git
  • cd boot2docker
  • git -c core.autocrlf=false checkout v1.8.1 আপনার উপযুক্ত সংস্করণ # বা
  • সম্পাদনা করুন rootfs/etc/rc.d/automount-shares
  • try_mount_share <local_dir> <mount_name>শেষে ফাইয়ের ঠিক আগে লাইন যুক্ত করুন । উদাহরণ স্বরূপ

    try_mount_share /e e
    

    ওএসের যে কোনও প্রয়োজন যেমন বিন / ইত্যাদি সেট না করার বিষয়ে নিশ্চিত হন ...

  • docker build -t boot2docker . # এটি প্রথমবার প্রায় এক ঘন্টা সময় নেবে :(
  • docker run --rm boot2docker > boot2docker.iso
  • পুরানো boot2docker.iso ব্যাকআপ করুন এবং আপনার নতুনটিকে তার জায়গায়, / d / ডক / মেশিন / মেশিনে / অনুলিপি করুন

এটি কাজ করে, এটি কেবল দীর্ঘ এবং জটিল

ডকার সংস্করণ 1.8.1, ডকার-মেশিন সংস্করণ 0.4.0


যে কারওর সাথে এটির সমস্যা রয়েছে, আমি নিশ্চিত যে আমাকে স্থানীয় পথগুলি ডকার-মেশিনের সাথে মেলে। এছাড়াও ডকর-রচনা মনে হয়েছিল নিয়মিত ডকার যখন না খোলেন - ভলিউমগুলি মাউন্ট করতে সফল হয়েছিল - কেন তা নিশ্চিত নয়।
spieden

4
এখানে উল্লিখিত সমাধানের জন্য একটি স্ক্রিপ্ট তৈরি করেছে। সর্বশেষ ডকার 1.10 এবং ডকার-মেশিনে 0.6.0 gist.github.com/cristobal/fcb0987871d7e1f7449e
ক্রিস্টোবাল

বিভিন্ন সংস্থানগুলি ব্যবহার সম্পর্কে কথা বলছে /mnt/sda1/var/lib/boot2docker/profile, আপনি কেন ব্যবহারের দিকে পরিবর্তন করেছেন তা ব্যাখ্যা করতে পারেন /mnt/sda1/var/lib/boot2docker/bootlocal.sh? এছাড়াও, এই অনেক পাঠের মাধ্যমে আঘাত করা আপনার উত্তরের পাঠযোগ্যতায় অবদান রাখে না ;-)
ফোরজ

4
@ ফোরেজ পয়েন্ট আমার ফর্ম্যাটিং সম্পর্কে নেওয়া হয়েছে :)। কেন আমি bootlocal.shপদ্ধতিটি আর পরামর্শ দিচ্ছি তা মনে নেই। আমি কেবল এটিই বলতে পারি যে এটি bootlocal.shপ্রোফাইলের চেয়ে মাউন্ট কমান্ড ব্যবহারের মতো দেখতে কেবল ক্লিনার দেখাচ্ছে use এছাড়াও, সাধারণত, আমি বিশ্বাস করি যে profileএকাধিকবার চালানো যেতে পারে এবং একটি মাউন্ট কেবল একবার চালানো দরকার, তাই এটি আরও অর্থবোধ করে। তবে দু'জনেই কাজ করতে পারে।
অ্যান্ডি

এটি প্রেম! ধন্যবাদ!
কোরবানী

28

এছাড়াও এই ইস্যুতে দৌড়েছে এবং দেখে মনে হচ্ছে ডকর-মেশিন ব্যবহার করার সময় স্থানীয় ভলিউমগুলি মাউন্ট করা হয়নি। একটি হ্যাক সমাধান হয়

  1. ডকার-মেশিন উদাহরণের বর্তমান ওয়ার্কিং ডিরেক্টরিটি পান docker-machine ssh <name> pwd

  2. rsyncদূরবর্তী সিস্টেমে ফোল্ডারটি অনুলিপি করতে একটি কমান্ড লাইন সরঞ্জাম ব্যবহার করুন

    rsync -avzhe ssh --progress <name_of_folder> username@remote_ip:<result _of_pwd_from_1>.
    

ডিফল্ট pwd / root তাই উপরের কমান্ডটি হবে rsync -avzhe ssh --progress <name_of_folder> username@remote_ip:/root

নোট: আপনার দূরবর্তী সিস্টেমের জন্য পাসওয়ার্ড সরবরাহ করতে হবে। আপনি রিমোট সিস্টেমে ssh করে একটি দ্রুত তৈরি করতে পারেন এবং একটি পাসওয়ার্ড তৈরি করতে পারেন।

  1. ভলিউম আপনার পয়েন্ট মাউন্ট পরিবর্তন docker-compose.ymlথেকে ফাইল .:/appথেকে/root/<name_of_folder>:/app

  2. চালান docker-compose up -d

স্থানীয়ভাবে পরিবর্তনগুলি করা হয় এনবি, rsyncরিমোট সিস্টেমে পরিবর্তনগুলি পুনরায় চালাতে ভুলবেন না ।

এটি নিখুঁত নয় তবে এটি কাজ করে। একটি সমস্যা চলছে https://github.com/docker/machine/issues/179 এ

এটি সমাধানের চেষ্টা করা অন্যান্য প্রকল্পের মধ্যে রয়েছে ডকার-আরএসইএনসি


আরএসসিএনকে রিমোট সিস্টেমে ইনস্টল করার দরকার আছে বলে মনে হচ্ছে `sh: rsync: পাওয়া যায় নি rync: সংযোগ অপ্রত্যাশিতভাবে বন্ধ (0 বাইট এখনও পাওয়া গেছে) [প্রেরক] আরএসএনসি ত্রুটি: রিমোট কমান্ড খুঁজে পাওয়া যায় নি (কোড 127) সোর্সকেচে / rsync / আরএসএনসি -45 / rsync / io.c (453) [প্রেরক = 2.6.9] it আপনি এটি কীভাবে কাজ করতে পেলেন?
ক্রিংকার

4
আপনার স্থানীয় সিস্টেমে
আরএসআইএনসি

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

4
এখানে উল্লিখিত সমাধানের জন্য একটি স্ক্রিপ্ট তৈরি করেছে। সর্বশেষ docker 1.10এবং docker-machine 0.6.0 gist.github.com/cristobal/fcb0987871d7e1f7449e
ক্রিস্টোবাল

ক্রিস্টোবালকে দেখে মনে হচ্ছে আপনি মাউন্ট সলিউশনটি স্ক্রিপ্ট করেছেন, আরএসসিএন সলিউশন নয়?
অ্যান্ডি

14

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

আছে কথোপকথন কিভাবে Docker-মেশিনের GitHub রেপো এই সমস্যা সমাধানের জন্য করে। কেউ কেউ একটি তৈরি টান অনুরোধ বাস্তবায়নে scp কমান্ড Docker-মেশিনে এবং এটি ইতিমধ্যে মাস্টার উপর মার্জ, যাতে কিনা এটি খুব সম্ভাব্য যে পরবর্তী রিলিজে এটি অন্তর্ভুক্ত করা হবে না।

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

web:
  build: .
  command: git clone https://github.com/my/repo.git; ./repo/run_web.sh
  volumes:
    - .:/app
  ports:
    - "8000:8000"
  links:
    - db:db
    - rabbitmq:rabbit
    - redis:redis

আপডেট: আরও অনুসন্ধান করে আমি দেখতে পেলাম যে বৈশিষ্ট্যটি সর্বশেষতম বাইনারিগুলিতে ইতিমধ্যে উপলব্ধ , আপনি এগুলি পেয়ে গেলে আপনি আপনার স্থানীয় প্রকল্পের কমান্ড চালাতে পারবেন এমনভাবে :

docker-machine scp -r . dev:/home/docker/project

এটি সাধারণ ফর্ম হচ্ছে:

docker-machine scp [machine:][path] [machine:][path]

সুতরাং আপনি মেশিন থেকে এবং এর মধ্যে ফাইলগুলি অনুলিপি করতে পারেন।

চিয়ার্স!



4
এই পদ্ধতিটি খুব ধীর :(
সের্গেজ জেভসেজেভ

5

অক্টোবর 2017 সাল থেকে ডকার-মেশিনের জন্য একটি নতুন কমান্ড রয়েছে যা কৌশলটি কাজ করে, তবে এটি কার্যকর করার আগে ডিরেক্টরিতে কোনও কিছুই নেই তা নিশ্চিত করুন, অন্যথায় এটি হারিয়ে যেতে পারে:

docker-machine mount <machine-name>:<guest-path> <host-path>

আরও তথ্যের জন্য ডক্স পরীক্ষা করুন: https://docs.docker.com/machine/references/mount/

পরিবর্তনের সাথে জনসংযোগ: https://github.com/docker/machine/pull/4018


4
অবিশ্বাস্যরূপে, ডকার মেশিন ডকুমেন্টেশন (যা আপনি লিঙ্ক করেছেন) থেকে, আক্ষরিক - এটি জানা অসম্ভব যে কমান্ডের ক্রমটি ...:<guest-path> <host-path>(অন্যদিকে নয় বরং)। ডকুমেন্টেশনে নোট করার মতো সাধারণ এবং সমালোচনামূলক কিছু ... ঠিক তাই নয়!
ড্যান নিসেনবাউম

আমার ধারণা এটি খুব স্পষ্ট নয়, আপনি ঠিক বলেছেন। কমান্ডের তালিকা থেকে এটি অনুমান করতে হবে
জোর্জে

এটি কৌতুকটি করে তবে অন্যভাবে। এটি আপনার স্থানীয় মেশিনে ডকার-মেশিন ডির মাউন্ট করতে দেয়। দুর্ভাগ্যক্রমে এটি
অন্যভাবে

4

আপনি যদি ডকার-মেশিনের সাথে আরএসসিএনসি বিকল্পটি চয়ন করেন তবে আপনি এটির docker-machine ssh <machinename>মতো কমান্ডের সাথে এটি একত্রিত করতে পারেন :

rsync -rvz --rsh='docker-machine ssh <machinename>' --progress <local_directory_to_sync_to> :<host_directory_to_sync_to>

এটি HOSTখালি রেখে, rsync- এর এই কমান্ড বিন্যাসটি ব্যবহার করে :

rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

( http://linuxcommand.org/man_pages/rsync1.html )


1

অবশেষে কীভাবে উইন্ডোজ ডকার টুলবক্সটিকে v1.12.5 এ আপগ্রেড করতে হবে এবং Oracle VM VirtualBoxম্যানেজারে একটি ভাগ করা ফোল্ডার যুক্ত করে এবং পাথ রূপান্তর অক্ষম করে আমার ভলিউমগুলিকে কাজ করে রাখুন । আপনার যদি উইন্ডোজ 10+ থাকে তবে আপনার উইন্ডোজের জন্য নতুন ডকার ব্যবহার করা ভাল।

1 ম আপগ্রেড ব্যথা:

  1. প্রথমে ভার্চুয়ালবক্স আনইনস্টল করুন।
    • হ্যাঁ যা অ্যান্ড্রয়েড স্টুডিওর মতো অন্যান্য সরঞ্জামগুলিতে স্টাফ ভঙ্গ করতে পারে। ধন্যবাদ ডকার :(
  2. ডকার টুলবক্সের নতুন সংস্করণ ইনস্টল করুন।

Redis ডাটাবেস উদাহরণ: redis: image: redis:alpine container_name: redis ports: - "6379" volumes: - "/var/db/redis:/data:rw"

ডকার কুইকস্টার্ট টার্মিনালে ....

  1. রান docker-machine stop default- ভিএম অপমানিত হয়েছে তা নিশ্চিত করুন

ওরাকল ভিএম ভার্চুয়ালবক্স ম্যানেজারে ...

  1. defaultভিএম বা কমান্ড লাইনের মাধ্যমে একটি ভাগ করা ফোল্ডার যুক্ত হয়েছে
    • D:\Projects\MyProject\db => /var/db

ইন docker-compose.yml...

  1. ম্যাপযুক্ত পুনরায় ভলিউম হিসাবে: "/var/db/redis:/data:rw"

ডকার কুইকস্টার্ট টার্মিনালে ....

  1. সেট করুন COMPOSE_CONVERT_WINDOWS_PATHS=0(টুলবক্স সংস্করণ> = 1.9.0 এর জন্য)
  2. docker-machine start defaultভিএম পুনরায় চালু করতে চালান ।
  3. cd D:\Projects\MyProject\
  4. docker-compose up এখন কাজ করা উচিত।

এখন redis ডাটাবেস তৈরি করে D:\Projects\MyProject\db\redis\dump.rdb

আপেক্ষিক হোস্ট পাথ এড়িয়ে চলবেন কেন?

আমি উইন্ডোজ টুলবক্সের জন্য আপেক্ষিক হোস্ট পাথগুলি এড়িয়ে গিয়েছি কারণ তারা অবৈধ '\' চরিত্রগুলি প্রবর্তন করতে পারে। এটি সম্পর্কিত পাথ ব্যবহার করার মতো সুন্দর নয় docker-compose.ymlতবে কমপক্ষে আমার সহযোগী বিকাশকারীরা সহজেই এটি করতে পারে এমনকি যদি তাদের প্রকল্প ফোল্ডারটি docker-compose.ymlফাইলটি হ্যাক না করে অন্য কোথাও হয় (এসসিএমের জন্য খারাপ)।

আসল ইস্যু

এফওয়াইআই ... আমি যখন পুরানো সংস্করণগুলির জন্য ঠিক দুর্দান্ত কাজ করতাম তখন পরিষ্কার পরিষ্কার আপেক্ষিক পাথ ব্যবহার করিলে আমি এখানে আসল ত্রুটিটি পেয়েছি। আমার ভলিউম ম্যাপিংটি স্রেফ ব্যবহৃত হত"./db/redis:/data:rw"

ERROR: for redis Cannot create container for service redis: Invalid bind mount spec "D:\\Projects\\MyProject\\db\\redis:/data:rw": Invalid volume specification: 'D:\Projects\MyProject\db\redis:/data

এটি দুটি কারণে বিরতি দেয় ..

  1. এটি অ্যাক্সেস করতে পারে না D: ড্রাইভে
  2. ভলিউম পাথগুলিতে \অক্ষর অন্তর্ভুক্ত থাকতে পারে
    • docker-compose তাদের যুক্ত করে এবং তার জন্য আপনাকে দোষ দেয় !!
    • COMPOSE_CONVERT_WINDOWS_PATHS=0এই বাজে কথা থামাতে ব্যবহার করুন ।

আমি আপনার docker-compose.ymlফাইলে আপনার অতিরিক্ত ভিএম শেয়ার্ড ফোল্ডার ম্যাপিংয়ের ডকুমেন্ট করার পরামর্শ দিচ্ছি কারণ আপনাকে আবার ভার্চুয়ালবক্স আনইনস্টল করতে এবং ভাগ করা ফোল্ডারটি পুনরায় সেট করতে হবে এবং যাইহোক আপনার সহকর্মী দেবগণ এটির জন্য আপনাকে ভালবাসবে।


আপনি স্যার, খুব ভাল ব্যক্তি
অ্যারেএনএইচএস

1

অন্যান্য সমস্ত উত্তর সময়ের জন্য ভাল ছিল তবে এখন (ডকার টুলবক্স v18.09.3) সমস্ত বাক্সের বাইরে চলে। আপনাকে কেবল ভার্চুয়ালবক্স ভিএম-তে একটি ভাগ করা ফোল্ডার যুক্ত করতে হবে।

ডকার টুলবক্সটি স্বয়ংক্রিয়ভাবে ভার্চুয়াল লিনাক্স মেশিনের অধীনে C:\Usersভাগ করা ফোল্ডার হিসাবে যুক্ত হয় /c/Users(ভার্চুয়াল বক্স ভাগ করে নেওয়া ফোল্ডারগুলির বৈশিষ্ট্যটি ব্যবহার করে), সুতরাং যদি আপনার docker-compose.ymlফাইলটি এই পথের নীচে কোথাও অবস্থিত থাকে এবং আপনি হোস্ট মেশিনের ডিরেক্টরিগুলি কেবল এই পথের নীচে মাউন্ট করেন - সমস্তই বাক্সের বাইরে কাজ করা উচিত।

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

C:\Users\username\my-project\docker-compose.yml:

...
  volumes:
    - .:/app
...

.পথ স্বয়ংক্রিয়ভাবে পথটি রূপান্তরিত হবে C:\Users\username\my-projectএবং তারপর /c/Users/username/my-project। লিনাক্স ভার্চুয়াল মেশিনের দৃষ্টিকোণ থেকে এই পথটি ঠিক এভাবে দেখা যায় (আপনি এটি পরীক্ষা করতে পারেন: docker-machine sshএবং তারপরে ls /c/Users/username/my-project)। সুতরাং, চূড়ান্ত মাউন্ট হবে/c/Users/username/my-project:/app

সব আপনার জন্য স্বচ্ছভাবে কাজ করে।

তবে আপনার হোস্ট মাউন্টের পথটি যদি না থাকে তবে এটি কাজ করে না C:\Users। উদাহরণস্বরূপ, যদি আপনি এটির docker-compose.ymlঅধীনে রাখেন D:\dev\my-project

এটি সহজেই ঠিক করা যেতে পারে।

  1. ভার্চুয়াল মেশিন ( docker-machine stop) বন্ধ করুন।
  2. ভার্চুয়াল বক্স জিইউআই খুলুন, ভার্চুয়াল মেশিনের নামের সেটিংস defaultখুলুন, Shared Foldersবিভাগটি খুলুন এবং নতুন ভাগ করা ফোল্ডার যুক্ত করুন:

    • ফোল্ডার এর পথ: D:\dev
    • ফোল্ডারের নাম: d/dev

    OKদুবার টিপুন এবং ভার্চুয়াল বক্স জিইউআই বন্ধ করুন।

  3. ভার্চুয়াল মেশিন ( docker-machine start) চালু করুন।

এখানেই শেষ. হোস্ট মেশিনের অধীনে সমস্ত পাথ D:\devএখন docker-compose.ymlমাউন্টগুলিতে কাজ করা উচিত ।


1

এটি তিনটি টুলস সম্পন্ন জাদুকরী সমন্বয় হতে পারে: docker-machine mount, rsync,inotifywait

টিএল; ডিআর

নীচের সমস্ত উপর ভিত্তি করে স্ক্রিপ্ট এখানে

আসুন আমরা আপনার docker-compose.ymlএবং run_web.shভিতরে আছে বলে দিন/home/jdcaballerov/web

  1. মেশিনে মাউন্ট ডিরেক্টরি যা আপনার হোস্টে যেমন রয়েছে তেমন পাথdocker-machine machine:/home/jdcaballerov/web /tmp/some_random_dir
  2. আপনার হোস্টের মাউন্টের সাথে মাউন্ট করা ডিরেক্টরিটি সিঙ্ক্রোনাইজ করুন rsync -r /home/jdcaballerov/web /tmp/some_random_dir
  3. আপনার ডিরেক্টরিতে ফাইলগুলির প্রতিটি পরিবর্তনের উপর সিঙ্ক্রোনাইজ করুন:

    inotifywait -r -m -e close_write --format '%w%f' /home/jdcaballerov/web | while read CHANGED_FILE
    do
        rsync /home/jdcaballerov/web /tmp/some_random_dir
    done
    

সচেতন থাকুন - দুটি ডিরেক্টরি রয়েছে যার একই পথ রয়েছে - একটি আপনার স্থানীয় (হোস্ট) মেশিনে, দ্বিতীয়টি ডকার মেশিনে।


0

আমি ধরে নিই যে run_web.shফাইলটি আপনার docker-compose.ymlফাইলের মতো একই ডিরেক্টরিতে রয়েছে । তাহলে কমান্ডটি হওয়া উচিত command: /app/run_web.sh

যদি না Dockerfile(যে আপনি প্রকাশ করছেন না) run_web.shফাইলটি ডকারের ছবিতে রাখার যত্ন না নেয় ।


আপনার উত্তরের জন্য ধন্যবাদ. এটি একই ডিরেক্টরিতে রয়েছে। তবে আমি লক্ষ্য করেছি ভলিউম মাউন্ট করা হচ্ছে না। ফাইলগুলি উপলভ্য নয় এবং প্রশ্নটি রয়েছে ts এগুলি কীভাবে যুক্ত করবেন। কাঠামোটি syncano.com এর
jdcaballerov

আপনার কাছে ডকার এবং ডিকার-কম্পোজ উভয়ের সর্বশেষতম সংস্করণ রয়েছে তা নিশ্চিত করুন।
থমাসলেভিল

ডকার: ডকার সংস্করণ 1.6.0, বিল্ড 4749651, ডকার-মেশিন সংস্করণ 0.2.0 (8b9eaf2), ডকার-
কমপোজ

আপনি কি কোনও উপায়ে সিঙ্কানো.কম থেকে ডকফাইলকে সংশোধন করেছেন ?
থমাসলভিল

4
হ্যাঁ, আমি কোড যুক্ত করি, ডিরেক্টরি তৈরি করি। সমস্যাটি হ'ল ডকার-কমপোজ যখন এটি কার্যকর করে তখন এটি ভলিউম: ভলিউম::: / অ্যাপ্লিকেশনটিকে ওভাররাইট করে এবং একটি খালি ডিরেক্টরি ছেড়ে যায়। আমি রচনায় ভলিউম মন্তব্য করেছি এবং এটি কাজ করে।
jdcaballerov

0

ভার্চুয়ালবক্স পুনরায় আরম্ভ করার পরে অতিরিক্ত হোস্ট মাউন্ট পয়েন্ট এবং স্বতঃমাউন্ট তৈরি করতে এখানে সংযুক্ত আপডেট হওয়া স্ক্রিপ্ট সংক্ষিপ্ত করার পরে। কাজের পরিবেশ সংক্ষিপ্ত হিসাবে নীচে: - উইন্ডোজ 7 - ডকার-মেশিন.এক্সই সংস্করণ 0.7.0 - ভার্চুয়ালবক্স 5.0.22

    #!env bash

    : ${NAME:=default}
    : ${SHARE:=c/Proj}
    : ${MOUNT:=/c/Proj}
    : ${VBOXMGR:=C:\Program Files\Oracle\VirtualBox\VBoxManage.exe}
    SCRIPT=/mnt/sda1/var/lib/boot2docker/bootlocal.sh

    ## set -x
    docker-machine stop $NAME
    "$VBOXMGR" sharedfolder add $NAME --name c/Proj --hostpath 'c:\' --automount 2>/dev/null || :
    docker-machine start $NAME
    docker-machine env $NAME

    docker-machine ssh $NAME 'echo "mkdir -p $MOUNT" | sudo tee $SCRIPT'
    docker-machine ssh $NAME 'echo "sudo mount -t vboxsf -o rw,user $SHARE $MOUNT" |  sudo tee -a $SCRIPT'
    docker-machine ssh $NAME 'sudo chmod +x /mnt/sda1/var/lib/boot2docker/bootlocal.sh'
    docker-machine ssh $NAME 'sudo /mnt/sda1/var/lib/boot2docker/bootlocal.sh'
    #docker-machine ssh $NAME 'ls $MOUNT'

0

আমি আমার স্থানীয় মেশিনে ভার্চুয়ালবক্স ড্রাইভের সাথে ডকার-মেশিন 0.12.2 ব্যবহার করছি। আমি দেখতে পেলাম যে একটি ডিরেক্টরি /hosthome/$(user name)আছে যেখানে থেকে আপনার স্থানীয় ফাইলগুলিতে অ্যাক্সেস রয়েছে।


0

ভেবেছিলাম আমি উল্লেখ করেছি যে আমি উইন্ডোজ 10 এ 18.03.1-ce-win65 (17513) ব্যবহার করেছি এবং আমি লক্ষ্য করেছি যে আপনি যদি আগে কোনও ড্রাইভ ভাগ করে দিয়েছিলেন এবং শংসাপত্রগুলি ক্যাশে করে ফেলেছেন, একবার আপনি নিজের পাসওয়ার্ড ডকার পরিবর্তন করতে শুরু করবেন খালি খালি পাত্রে within

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

যদি ডকার-রচনা এই পরিস্থিতিতে কোনও ত্রুটি দেয় তবে এটি কার্যকর হবে।

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