डॉकर माउंटेड वॉल्यूम जोड़ता है; लिनक्स स्टाइल पथ से अनुवाद करते समय विंडोज़ पथ के अंत में सी


88

जब खिड़कियों पर एक डॉक छवि को माउंट करने की कोशिश कर रहा हूं तो मुझे कुछ दिलचस्प अजीबता मिली है।

मैंने एक .shस्क्रिप्ट बनाई जो हमारी डेवलपर पर्यावरण छवि को चलाने के लिए प्रोजेक्ट फ़ोल्डर का एक माउंट करता है। मुझे एक स्क्रिप्ट चाहिए, जो हर देवता अपनी मशीन की परवाह किए बिना चला सकता है। यह सब वर्तमान परियोजना फ़ोल्डर के साथ रन करने वाला है।

#!/usr/bin/env bash
docker run -it --rm -v D:\my\project\folder:/wkDir $IMAGE_TAG yarn dev

ठीक चलता है। अब योजना इस स्क्रिप्ट को कॉल करने की है npm, इसलिए मैं वर्तमान फ़ोल्डर के सापेक्ष काम करना चाहूंगा। चलिए एक और संस्करण की कोशिश करते हैं।

docker run -it --rm -v $PWD:/wkDir $IMAGE_TAG yarn dev

के साथ विफल:

C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from 
daemon: Mount denied:
The source path "D:/my/project/folder;C"
doesn't exist and is not known to Docker.

वाट। क्या ;Cऔर कहाँ से आया है?

इसलिए मैं वह echo $PWDकरता हूं जो मुझे देता है /d/my/project/folder

दिलचस्प है, इसलिए $PWDलिनक्स पथ प्रारूप में सही पथ पर हल होता है, और ऐसा लगता है जैसे docker उस सही windows पथ में अनुवाद करने की कोशिश कर रहा है, सिवाय इसके ;Cकि यह कहीं से भी बाहर दिखाई देता है। और \हैं /...

यहाँ वास्तव में क्या हो रहा है?

मुझे VSCode के टर्मिनल गिट बैश और पावरशेल में समान परिणाम मिलता है।

अद्यतन: मैंने देखा कि .shVSCode के पॉवरशेल टर्मिनल में चल रहा है , एक अलग cmd.exeकंसोल विंडो खोलता है जो स्क्रिप्ट को git bash में चलाने के लिए लगता है। तो यह git bash मुद्दा हो सकता है।

जवाबों:


126

तो कुछ अतिरिक्त खुदाई के साथ मुझे ये तीन धागे मिले, जो गिट-बश मैकिंग अप डूकर माउंट से संबंधित थे:

https://forums.docker.com/t/weird-error-under-git-bash-msys-solved/9210 https://github.com/moby/moby/issues/24029#issuecomment-250412919

जब मैं पथ रूपांतरण गिट-बैश का उपयोग कर रहा हूँ, तो मुझे सिंटैक्स की यह तालिका मिली: http://www.mingw.org/wiki/Posix_path_conversion

जिनमें से एक प्रारूप में आउटपुट x;x;C:\MinGW\msys\1.0\x:। इसमें ध्यान दें ;C। अगर गिट-बैश चालाक होने की कोशिश कर रहा है, वाक्यविन्यास को भर रहा है और इस प्रारूप के साथ एक पथ का उत्पादन कर रहा है, तो यह इसे समझाएगा।

समाधान पथ परिवर्तन से बचने के लिए, उपसर्ग द्वारा उपयोग करके है /। तो काम करने वाले कमांडर को वर्तमान वर्किंग डायरेक्टरी के साथ गिट-बैश से डॉक चलाने की आज्ञा दी जाती है:

docker run -it --rm -v /${PWD}:/wkDir $IMAGE_TAG yarn dev

9
मैंने पाया कि मुझे अतिरिक्त रूप से मार्ग को एक तार में लपेटना था"/${PWD}"
बानानप्पल

11
$ docker run -p 8080:3000 -v /$(pwd):/var/www -w //var/www node npm start मैंने अंततः पाया कि मुझे ब्रेसिज़ के बजाय कोष्ठक के साथ अग्रणी स्लैश का उपयोग करना पड़ा। इसके अलावा, वर्किंग डायरेक्टरी के साथ मुझे दो प्रमुख स्लैश चाहिए थे। FYI करें: यह वह कमांड है जिसकी मुझे
डॉकलर के

इसने मेरे लिए काम किया (विंडोज़ 10 git bash पर): docker run --name my-wordpress -v "/ $ {PWD} / wordpress": / wordpress_sources -p 80:80 -dk <image_name>
progonkpa

2
जीवन बचाने वाले। Windows10 और git-bash यहां, मुझे डॉकटर-कंपोज़ का उपयोग किए बिना वॉल्यूम बढ़ाने की कोशिश करने में एक लंबा समय लगा, जब तक कि मैं इस पोस्ट को नहीं देखता। अब यह काम करता है docker run --rm -v /${PWD}/migrations:/flyway/sql --network xxx_default flyway:। धन्यवाद।
एमिली

जिंदगी। सेवर। +1000000
जोनाथन टुज़मैन

3

मेरे लिए समाधान बस /किसी भी रास्तों के अंत में एक बंद स्लैश को शामिल करना था ।

के बजाय एग

/opt/apache-atlas-2.0.0/bin/atlas_start.py

...उपयोग

/opt/apache-atlas-2.0.0/bin/atlas_start.py/


3

Git Bash (MinGW) से विंडोज 10 में डॉकटर कंटेनर में वर्तमान निर्देशिका को माउंट करने से POSIX पथ रूपांतरण के कारण विफल हो सकता है। से शुरू होने वाला कोई भी पथ /एक वैध विंडोज पथ में परिवर्तित हो जाता है।

touch test.txt
docker run --rm -v $(pwd):/data busybox ls -la /data/test.txt
# ls: C:/Git/data/test.txt: No such file or directory

के साथ उपसर्ग द्वारा POSIX पथ से बच /

पथ रूपांतरण को छोड़ने के लिए, सभी POSIX रास्तों को अतिरिक्त अग्रणी स्लैश ( /) सहित उपसर्ग करना होगा /$(pwd)

touch test.txt
docker run --rm -v /$(pwd):/data busybox ls -la //data/test.txt
# -rwxr-xr-x    1 root     root             0 Jun 22 23:45 //data/test.txt

Git Bash में पथ //data/test.txtपरिवर्तित नहीं किया गया है और Linux के गोले //(अग्रणी डबल स्लैश) को अनदेखा किया गया है और उसी तरह व्यवहार किया गया है /

पथ रूपांतरण अक्षम करें

MSYS_NO_PATHCONVपर्यावरण चर का उपयोग करके Git Bash (MinGW) में POSIX पथ रूपांतरण अक्षम करें ।

पथ रूपांतरण को कमांड स्तर पर अक्षम किया जा सकता है:

touch test.txt
MSYS_NO_PATHCONV=1 docker run --rm -v $(pwd):/data busybox ls -la /data/test.txt
# -rwxr-xr-x    1 root     root             0 Jun 22 23:45 /data/test.txt

पथ रूपांतरण को शेल (या सिस्टम) स्तर पर अक्षम किया जा सकता है:

export MSYS_NO_PATHCONV=1
touch test.txt
docker run --rm -v $(pwd):/data busybox ls -la /data/test.txt
# -rwxr-xr-x    1 root     root             0 Jun 22 23:45 /data/test.txt

2
इस समाधान को प्रदान करने के लिए धन्यवाद, क्योंकि पथ रूपांतरण को अक्षम करने से बचने के लिए मेरे लिए काम नहीं किया गया था।
चैंडलर बोंग


0

मैं वास्तव में एक ही मुद्दा था। यदि आप Git Bash का उपयोग कर रहे हैं तो यह निर्भर करता है कि यह कमांड काम करता है (उदाहरण के रूप में nginx का उपयोग करके):

docker कंटेनर रन --name कंटेनर-नाम -v `pwd -W` / html: / usr / share / nginx / html -p 8000: 80 -d nginx

बेशक आप अपनी इच्छानुसार बंदरगाह और निर्देशिका को निर्दिष्ट कर सकते हैं।


0

मेरे पास गिट बैश पर एक ही मुद्दा था और कमांड प्रॉम्प्ट नहीं। आप इसके बजाय कर सकते हैं

docker run -it --rm -v "/${PWD}/D:\my\project\folder":/wkDir $IMAGE_TAG yarn dev

0

सीधे मेरे लिए नीचे काम किया। बस गतिशील चर का उपयोग न करें।

docker run --rm -u root -p 8080:8080 -v jenkins-data/:/var/jenkins_home -v /var/run/docker.sock/:/var/run/docker.sock -v /Users/<YOUR USER NAME>/:/home jenkinsci/blueocean
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.