উইন্ডোজ 10 এর ডকারে ভলিউম হিসাবে বর্তমান ডিরেক্টরি মাউন্ট করুন


132

বিবরণ

আমি হাইপার-ভি এর মাধ্যমে উইন্ডোজ 10 এ ডকার সংস্করণ 1.12.5 ব্যবহার করছি এবং বর্তমান পথে কমান্ড হিসাবে ধারক নির্বাহী ব্যবহার করতে চাই। আমি একটি ডকার চিত্র তৈরি করেছি যা ভাল চলছে, তবে বর্তমান পথটি মাউন্ট করতে আমার একটি সমস্যা আছে। ধারণাটি হ'ল একটি উপাধি তৈরি করা এবং একটি docker run --rm [...]কমান্ড করা যাতে এটি বর্তমান ডিরেক্টরিতে সিস্টেম-ব্যাপী ব্যবহৃত হতে পারে।

সেটআপ

আমার একটি ড্রাইভ ই আছে একটি ফোল্ডার "পরীক্ষা" সহ এবং সেখানে কমান্ডটি কাজ করছে তা দেখানোর জন্য "উইন্ডোজ হোস্টে ফোল্ডার" নামে একটি ফোল্ডার রয়েছে। ডকফেরফিল ডিরেক্টরি তৈরি করে /data, এটি ভলিউম এবং ওয়ার্কডির হিসাবে সংজ্ঞায়িত করে।

রয়ে E:\testPowerShell বর্তমান ডিরেক্টরির হিসেবে এবং পাথ Docker কমান্ডটি নির্বাহ করার আমি সামগ্রী দেখতে পারবে E:\test:

PS E:\test> docker run --rm -it -v E:\test:/data mirkohaaser/docker-clitools ls -la
total 0
drwxr-xr-x 2 root root 0 Jan  4 11:45 .
drwxr-xr-x 2 root root 0 Jan  5 12:17 folder on windows host

সমস্যা

আমি বর্তমান ডিরেক্টরিটি ব্যবহার করতে চাই এবং নিখুঁত স্বরলিপি নয়। বিভিন্ন ত্রুটি বার্তার কারণে আমি ভলিউমে পিডাব্লুডিকে ব্যবহার করতে পারি না:

($ Pwd) দিয়ে চেষ্টা করা হচ্ছে

PS E:\test> docker run --rm -it -v ($pwd):/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error parsing reference: ":/data" is not a valid repository/tag.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.

/ ($ Pwd) দিয়ে চেষ্টা করা হচ্ছে

PS E:\test> docker run --rm -it -v /($pwd):/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error parsing reference: "E:\\test" is not a valid repository/tag.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.

´ ´pwd \ ´ দিয়ে চেষ্টা করা হচ্ছে ´

PS E:\test> docker run --rm -it -v ´$pwd´:/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: Invalid bind mount spec "´E:\\test´:/data": invalid mode: /data.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.

`Pwd` দিয়ে চেষ্টা করা হচ্ছে`

PS E:\test> docker run --rm -it -v `$pwd`:/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: create $pwd: "$pwd" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.

উইন্ডোজ 10 এর ডকারে ভলিউম হিসাবে বর্তমান ডিরেক্টরিটি মাউন্ট করার সঠিক বাক্যটি কী?

উত্তর:


308

উইন্ডোজ কমান্ড লাইন ( cmd) এ, আপনি বর্তমান ডিরেক্টরিটিকে এটির মতো মাউন্ট করতে পারেন:

docker run --rm -it -v %cd%:/usr/src/project gcc:4.9

পাওয়ারশেলে আপনি ব্যবহার করেন ${PWD}যা আপনাকে বর্তমান ডিরেক্টরি দেয়:

docker run --rm -it -v ${PWD}:/usr/src/project gcc:4.9

লিনাক্সে:

docker run --rm -it -v $(pwd):/usr/src/project gcc:4.9

ক্রস প্ল্যাটফর্ম

নিম্নলিখিত বিকল্পগুলি পাওয়ারশেল এবং লিনাক্স (কমপক্ষে উবুন্টু) উভয় ক্ষেত্রেই কাজ করবে:

docker run --rm -it -v ${PWD}:/usr/src/project gcc:4.9
docker run --rm -it -v $(pwd):/usr/src/project gcc:4.9

সিএমডির জন্য আপনার উদাহরণটি সঠিক এবং দুর্দান্ত কাজ করে! পাওয়ার শেল ভেরিয়েন্টটি কাজ করে না, যদিও w pwd.path নিজেই সঠিক, স্ক্রিপ্টে ব্যবহার করার সময় এটি সঠিক মানটির সাথে সমাধান করা হয় না: gist.github.com/McGo/8924cc5b0609f13c39092554a0bef183
ম্যাকগো

3
${PWD}ইউনিক্স সিস্টেমগুলিতেও কাজ করে (লিনাক্স, ম্যাকোস)। দ্রষ্টব্য : pwd= উপস্থিত কার্যক্ষম ডিরেক্টরি
thiagowfx

2
@ সিজেসিমন এটি দেখে মনে হচ্ছে আসলে এখানে থাকতে পারে ... পাওয়ারশেল সমর্থন করে $(pwd)যা লিনাক্সেও কাজ করবে বলে মনে হয় (আমার মনে হয় - অচিহ্নিত)
ETL

12
গীত ব্যাশ সঙ্গে এটা হতে পারে পারেন winpty docker run -it -v "/$(pwd -W):/usr/src/project" gcc:4.9বা winpty docker run -it -v "/$(cmd //c cd):/usr/src/project" gcc:4.9
কিট্টাকোস

1
উইন্ডোজ 10 এ আমার জন্য কাজ করছে না, সাফল্য
বাড়ানো

23

এটি পাওয়ারশেলের জন্য আমার পক্ষে কাজ করে:

docker run --rm -v ${PWD}:/data alpine ls /data

4
এটি কি এখনও বৈধ? চেষ্টা করার পরে আমি নিম্নলিখিতগুলি PS C:\Users\X\Projects\docker_django> docker run --rm -v ${PWD}:/data alpine ls /data C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: invalid mode: /data. See 'C:\Program Files\Docker Toolbox\docker.exe run --help'.
পেয়েছি

@ মিস্তালাবা যদি আপনি উইন্ডোজ 10 ব্যবহার করেন তবে এর Docker for Windowsপরিবর্তে ব্যবহার করার চেষ্টা করুন Toolbox
ফিনলে রোলফস

2
@ ফাইনলে-রওলফস ধন্যবাদ, তবে উইনের জন্য ডকার কেবল উইন প্রো এর সাথে কাজ করে।
মিসলাবা

9

উইন্ডোজের জন্য গিট ব্যাশের জন্য (কনেমুতে), নিম্নলিখিতগুলি আমার জন্য কাজ করে (ডকার উইন্ডোজ ধারকগুলির জন্য):

docker run --rm -it -v `pwd -W`:c:/api microsoft/dotnet:2-runtime

চারদিকে ব্যাকটিক্স / ব্যাককোটগুলি নোট করুন pwd -W!

পিডাব্লুডির অন্যান্য সমস্ত পরিবর্তনের সাথে আমি চেষ্টা করেছি যে আমি পেয়েছি: "Error response from daemon: invalid volume specification: ..."

আপডেট: উপরেরটি ডকার উইন্ডোজ পাত্রে ছিল, লিনাক্স পাত্রে ব্যবহারের জন্য:

docker run --rm -it -v `pwd -W`:/api -p 8080:80 microsoft/aspnetcore:2

সেমিডারদার ডকার রান-ভি pwd -W: / ইউএসআর / শেয়ার / ডেটা অ্যাটমগ্রাফ / ফিউসকি - ফাইল = / ইউএসআর / শেয়ার / ডেটা / মকিক্লু_সারাসাস.টিটিএল / মোকাইক্লোস ফাইল খুঁজে পাওয়া যায় নি: সি: / সরঞ্জাম / সেমিডার / বিক্রেতা /git- for
মার্টিনাস জুসেভিউয়াস

ব্যাকটিক্স সহ আমি করেছি এবং উইন্ডোজের জন্য গিটব্যাশ ব্যবহার করে এটি দুর্দান্ত কাজ করেছে
থিয়াগো কার্ডোসো

আমি নিশ্চিত করতে পারি যে এটি হাইপার গিটব্যাশের সাথে প্রথম বিকল্পেও কাজ করে
অ্যান্ডি

ব্যাকটিকগুলি একটি এম্বেড থাকা কমান্ড কার্যকর করার একটি কম কার্যকর উপায়। `command`
টিমোথি সি

8
  1. ডকার ডেস্কটপে (উইন্ডোজের জন্য ডকার) এ সেটিংস খুলুন ।
  2. ভাগ করা ড্রাইভগুলি নির্বাচন করুন ।
  3. আপনি আপনার পাত্রে (যেমন, সি) ভিতরে যে ড্রাইভটি ব্যবহার করতে চান তা নির্বাচন করুন।
  4. প্রয়োগ ক্লিক করুন । আপনাকে ব্যবহারকারীর শংসাপত্র সরবরাহ করতে বলা হতে পারে। উইন্ডোতে ধারকগুলির জন্য ড্রাইভ সক্ষম করা

  5. নীচের কমান্ডটি এখন পাওয়ারশেলের উপর কাজ করা উচিত (কমান্ড প্রম্পট সমর্থন করে না ${PWD}):

    docker run --rm -v ${PWD}:/data alpine ls /data

গুরুত্বপূর্ণ : আপনি / যখন আপনি আপনার উইন্ডোজ ডোমেন পাসওয়ার্ড পরিবর্তন করেন, মাউন্টটি নিঃশব্দে কাজ করা বন্ধ করবে , অর্থাৎ, -vকাজ করবে তবে ধারকটি আপনার হোস্ট ফোল্ডার এবং ফাইলগুলি দেখতে পাবে নাসমাধান : সেটিংস ফিরে যেতে, ভাগ ড্রাইভ থেকে টিক চিহ্ন তুলে, প্রয়োগ করুন , তাদের আবার চেক, প্রয়োগ করুন , এবং যখন অনুরোধ জানানো নতুন পাসওয়ার্ড লিখুন।


2

এখানে আমার যা Win10 ডকার-সিই এবং উইন 7 ডকার-টুলবক্স উভয়ের জন্যই উপযুক্ত। লাস এ সময়ে আমি এই লিখছি :)।

আপনি খেয়াল করতে পারেন আমি সি এর পরিবর্তে / হোস্ট_মন্ট / সি ব্যবহার করতে পছন্দ করি: / কারণ আমি মাঝে মাঝে ডকার-সিআর উইন 10 এর সাথে সি: /

$WIN_PATH=Convert-Path .

#Convert for docker mount to be OK on Windows10 and Windows 7 Powershell
#Exact conversion is : remove the ":" symbol, replace all "\" by "/", remove last "/" and minor case only the disk letter
#Then for Windows10, add a /host_mnt/" at the begin of string => this way : c:\Users is translated to /host_mnt/c/Users
#For Windows7, add "//" => c:\Users is translated to //c/Users
$MOUNT_PATH=(($WIN_PATH -replace "\\","/") -replace ":","").Trim("/")

[regex]$regex='^[a-zA-Z]/'
$MOUNT_PATH=$regex.Replace($MOUNT_PATH, {$args[0].Value.ToLower()})

#Win 10
if ([Environment]::OSVersion.Version -ge (new-object 'Version' 10,0)) {
$MOUNT_PATH="/host_mnt/$MOUNT_PATH"
}
elseif ([Environment]::OSVersion.Version -ge (new-object 'Version' 6,1)) {
$MOUNT_PATH="//$MOUNT_PATH"
}

docker run -it -v "${MOUNT_PATH}:/tmp/test" busybox ls /tmp/test

মন্তব্য করতে এবং নিশ্চিত করতে চাই যে এটি উইন্ডোজ সার্ভার ২০১২-এ ডকার টুলবক্সের জন্য মিলিয়ন ডলার উত্তর! চমৎকার কাজ! যে কারও কৌতূহলের জন্য, এর ${MOUNT_PATH}সমাধান হয়/c/Program Files/Docker Toolbox
পেট্রো মিমি

2

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

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

আমি নিম্নলিখিত বাক্য গঠন ব্যবহার করে শেষ করেছি:

MSYS_NO_PATHCONV=1 docker run --rm -it -v $(pwd):/usr/src/project gcc:4.9

কমান্ডের MSYS_NO_PATHCONV=1সামনের দিকে dockerএবং $(pwd)- বৃত্তাকার বন্ধনী, লোয়ার-কেস পিডাব্লুড, কোনও উদ্ধৃতি, ব্যাকস্ল্যাশগুলি নোট করুন ।

এছাড়াও, আমি যদি উইন্ডোজটিতে লিনাক্স পাত্রে ব্যবহার করি তবে ..

আমি এটি নতুন উইন্ডোজ টার্মিনাল, কনেমু এবং গিটব্যাশগুলিতে পরীক্ষা করেছি এবং তারা সকলেই আমার পক্ষে কাজ করেছে।


হ্যালো, এটি আমাকে শেষ পর্যন্ত এই কাজ করতে সহায়তা করেছে। আপনি জানেন কেন আমাদের MSYS_NO_PATHCONV=1কমান্ড বিকল্পটি প্রয়োজন ? অন্যথায় আমার গন্তব্য মাউন্ট dir "সি: / সরঞ্জাম / সেমিডার / বিক্রেতার / উইন্ডো-এর জন্য উইন্ডো" দিয়ে পূর্ণ হয়েছে
অস্টিন এল

1

এই আদেশটি এটি ঠিক করা উচিত।

ডকার রান --rm -it -v ${PWD}:c:\dataমিরকোয়াসার / ডকার-ক্লিটুলস

{PWD the হোস্ট বর্তমান ফোল্ডার। পরে :ধারক ফোল্ডার। মাউন্টিং সঠিক হলে ফাইলগুলি ধারকটিতে ডিরেক্টরটিতে তালিকাভুক্ত করা হবে c:\data


1

ফরোয়ার্ড স্ল্যাশগুলি পরিবর্তন করার জন্য আপনাকে সমস্ত পিছনের স্ল্যাশগুলি অদলবদল করতে হবে

ডকার-ভি সি: \ আমার \ ফোল্ডার: / মাউন্টলোকেশন ...

প্রতি

ডকার-ভি সি: / আমার / ফোল্ডার: / মাউন্টলোকেশন ...

আমি সাধারণত একটি সেন্টিমিডি স্ক্রিপ্ট থেকে ডকারকে কল করি যেখানে আমি ফোল্ডারটি যে স্ক্রিপ্টটিতে কল করছি আমি সেই স্ক্রিপ্টের সাথে তুলনামূলকভাবে মাউন্ট করা চাই আমি এটি করি ...

SETLOCAL

REM capture the path to this file so we can call on relative scrips
REM without having to be in this dir to do it.

REM capture the path to $0 ie this script
set mypath=%~dp0

REM strip last char
set PREFIXPATH=%mypath:~0,-1%

echo "PREFIXPATH=%PREFIXPATH%"
mkdir -p %PREFIXPATH%\my\folder\to\mount

REM swap \ for / in the path
REM because docker likes it that way in volume mounting
set PPATH=%PREFIXPATH:\=/%
echo "PPATH=%PPATH%"

REM pass all args to this script to the docker command line with %*
docker run --name mycontainername --rm -v %PPATH%/my/folder/to/mount:/some/mountpoint  myimage %*

ENDLOCAL

0

কমান্ড প্রম্পট ( Cmd.exe)

উইন্ডোজ থেকে যখন ডকার সিএলআই ব্যবহৃত হয় Cmd.exe, %cd%বর্তমান ডিরেক্টরিটি মাউন্ট করতে ব্যবহার করুন :

echo test > test.txt
docker run --rm -v %cd%:/data busybox ls -ls /data/test.txt

গিট ব্যাশ (মিনজিডাব্লু)

Docker CLI গীত ব্যাশ (MinGW) থেকে ব্যবহার করা হয়, তখন বর্তমান ডিরেক্টরী মাউন্ট একটি POSIX পথ রূপান্তর কারণে ব্যর্থ হতে পারে: Docker মাউন্ট ভলিউম যোগ করা; যখন লিনাক্স শৈলী পথ থেকে অনুবাদ সি জানালা পাথ শেষ

প্রিফিক্স করে পসিক্স পাথগুলি এড়িয়ে চলুন /

পাথ রূপান্তর এড়াতে, পসিক্স পাথগুলি /স্ল্যাশ ( //) সহ শীর্ষস্থানীয় ডাবল স্ল্যাশ ( ) সহ প্রিফিক্স করতে হবে , সহ/$(pwd)

touch test.txt
docker run --rm -v /$(pwd):/data busybox ls -la //data/test.txt

পাথ রূপান্তর অক্ষম করুন

MSYS_NO_PATHCONV=1কমান্ড স্তরে পরিবেশ পরিবর্তনশীল সেট করে গিট বাশ (MinGW) এ পসিক্স পাথ রূপান্তরটি অক্ষম করুন

touch test.txt
MSYS_NO_PATHCONV=1 docker run --rm -v $(pwd):/data busybox ls -la /data/test.txt

বা শেল (সিস্টেম) স্তর

export MSYS_NO_PATHCONV=1
touch test.txt
docker run --rm -v $(pwd):/data busybox ls -la /data/test.txt

-2
docker run --rm -v /c/Users/Christian/manager/bin:/app --workdir=/app  php:7.2-cli php  app.php

গিট বাশ

 cd /c/Users/Christian/manager
    docker run --rm -v  ${PWD}:/app  --workdir=/app  php:7.2-cli php  bin/app.php

echo ${PWD} ফলাফল:

/ C / ব্যবহারকারীরা / খ্রিস্টান / ম্যানেজার

সেন্টিমিডি বা পাওয়ারশেল

  cd C:\Users\Christian\manager

echo ${PWD} ফলাফল:

পাথ ---- সি: \ ব্যবহারকারীরা \ খ্রিস্টান \ পরিচালক

যেমনটি আমরা সেমিডি বা পাওয়ারশেলে দেখতে পাই। {পিডাব্লুডি D কাজ করবে না


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