डॉकर: ड्राइव साझा नहीं किया गया है


15

जब एक एएसपी .नेट कोर 3.1 एमवीसी एप्लिकेशन को "डॉकटराइज करना" मुझे निम्न परिणाम मिला:

docker run -dt -v "C:\Users\admin\vsdbg\vs2017u5:/remote_debugger:rw" -v "D:\xxx\yyy\Spikes\DockerizedWebApp1\DockerizedWebApp1:/app" -v "D:\xxx\yyy\Spikes\DockerizedWebApp1:/src/" -v "C:\Users\admin\.nuget\packages\:/root/.nuget/fallbackpackages2" -v "C:\Program Files\dotnet\sdk\NuGetFallbackFolder:/root/.nuget/fallbackpackages" -e "DOTNET_USE_POLLING_FILE_WATCHER=1" -e "ASPNETCORE_LOGGING__CONSOLE__DISABLECOLORS=true" -e "ASPNETCORE_ENVIRONMENT=Development" -e "NUGET_PACKAGES=/root/.nuget/fallbackpackages2" -e "NUGET_FALLBACK_PACKAGES=/root/.nuget/fallbackpackages;/root/.nuget/fallbackpackages2" -P --name DockerizedWebApp1 --entrypoint tail dockerizedwebapp1:dev -f /dev/null
docker: Error response from daemon: status code not OK but 500: {"Message":"Unhandled exception: Drive has not been shared"}.
See 'docker run --help'.
C:\Users\admin\.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.10.6\build\Container.targets(198,5): error CTC1015: Docker command failed with exit code 125.
C:\Users\admin\.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.10.6\build\Container.targets(198,5): error CTC1015: docker: Error response from daemon: status code not OK but 500: {"Message":"Unhandled exception: Drive has not been shared"}.
C:\Users\admin\.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.10.6\build\Container.targets(198,5): error CTC1015: See 'docker run --help'.
C:\Users\admin\.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.10.6\build\Container.targets(198,5): error CTC1015: If the error persists, try restarting Docker Desktop.

कहने की जरूरत नहीं है कि ' docker run --help ' ने डॉकटर डॉक्स आदि में सभी (लापता लिंक / एंकर की मदद नहीं की )।

कुछ अतिरिक्त जानकारी:

  • किसी भी संशोधन के बिना VS2019 मचान क्या है आवेदन ।
  • डॉकर छवि लिनक्स है ( जिसे मैं नहीं बता सकता )।
  • डॉकर संस्करण 19.03.5 है, 633a0ea का निर्माण करें

चूंकि मैं लिनक्स से परिचित नहीं हूं इसलिए यह त्रुटि मेरे लिए "शो-स्टॉपर" की तरह है। शायद लिनक्स को ड्राइव माउंट करने का निर्देश नहीं दिया गया है? लेकिन कौन सा? संदेश यह नहीं कहता है ...

हो सकता है कि विंडोज को एक ड्राइव साझा करना है, या एक फ़ोल्डर को ड्राइव पर मैप करना है जिसे साझा करने की आवश्यकता है? संदेश यह नहीं कहता है ...

यहां डॉकर डैशबोर्ड का स्क्रीनशॉट दिया गया है:

यहां छवि विवरण दर्ज करें

और यहाँ डॉकरफ़ाइल है:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src 
COPY ["DockerizedWebApp1/DockerizedWebApp1.csproj", "DockerizedWebApp1/"]
RUN dotnet restore "DockerizedWebApp1/DockerizedWebApp1.csproj"
COPY . .
WORKDIR "/src/DockerizedWebApp1"
RUN dotnet build "DockerizedWebApp1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "DockerizedWebApp1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DockerizedWebApp1.dl"]

कोई भी सहायताकाफी प्रशंसनीय होगी। अग्रिम में धन्यवाद!

जवाबों:


15

Docker रन कमांड में C ड्राइव से वॉल्यूम शामिल हैं, जैसे -v "C:\Users\admin\vsdbg\vs2017u5:/remote_debugger:rw"। इन काम करने के लिए, आपको अपने साझा ड्राइव में सी ड्राइव को शामिल करना होगा (सेटिंग्स के तहत बॉक्स की जांच करें -> संसाधन -> फ़ाइल साझाकरण)। आप डी ड्राइव में साझा की जाने वाली फ़ाइलों को भी स्थानांतरित कर सकते हैं जो पहले से ही एम्बेडेड वीएम को साझा किया गया है, हालांकि यह इस मामले में एक विकल्प नहीं है। यह जानने के लिए कि कौन सी ड्राइव को साझा करना है, रन कमांड में वॉल्यूम माउंट में प्रयुक्त ड्राइव की जांच करें।

विंडोज के लिए डॉक के पिछले संस्करणों में, यह चुपचाप सफल होगा और कंटेनर में एक खाली फ़ोल्डर को माउंट करेगा। इसलिए उपयोगकर्ताओं को पहले साझा किए गए ड्राइव की जांच करने में त्रुटि कहना एक अच्छा सुधार है।


C: मेरा बूट ड्राइव है और ओएस इस पर स्थापित है। क्या आपको वास्तव में लगता है कि इस तरह की संवेदनशील जानकारी को साझा करना एक अच्छा अभ्यास है?
अलेक्जेंडर क्रिस्टोव

@AlexanderChristov ड्राइव को एम्बेडेड VM के साथ साझा किया जाता है जो आपको उस कंटेनर से निर्देशिकाओं को माउंट करने की अनुमति देता है। आप यह नहीं कह सकते हैं कि आप उस ड्राइव को साझा नहीं करना चाहते हैं, जबकि उस कमांड को चलाना चाहते हैं जिसे उस ड्राइव पर निर्देशिकाओं तक पहुंच की आवश्यकता होती है। यह एक डॉकटर मुद्दा नहीं है, यह एक ऐसा मुद्दा है जिसे आप कमांड को चलाने के लिए कहते हैं।
बिच

फिर भी "देखें 'docker run --help'।" काफी बेकार है। वास्तव में यह कुछ हद तक हानिकारक है क्योंकि समय की एक शुद्ध बर्बादी होती है, जो कि, जैसा कि आप देख सकते हैं सवाल पूछने के लिए। कोई बात नहीं धन्यवाद।
अलेक्जेंडर क्रिस्टोव

@AlexanderChristov यह किसी भी कमांड के लिए एक सामान्य संदेश है जो विफल हो जाता है, जिससे आपको पता चलता है कि कौन सा सबकोमैंड मदद पाठ प्रासंगिक हो सकता है। सुनिश्चित नहीं है कि हर संभव त्रुटि स्थिति को कवर करने के लिए इसे कैसे समायोजित किया जाए। 500: {"Message":"Unhandled exception: Drive has not been shared"}त्रुटि ट्रिगर करने वाला संदेश उपयोगी भाग है।
13

यह देखने के लिए कि वे कहाँ / कब उत्पन्न होते हैं --help: github.com/moby/moby/blob/…
BMitch

8

डॉकिंग डैशबोर्ड से डॉकटर कंटेनरों को ड्राइव सी: मेकिंग ड्राइव ने समस्या को हल किया , चित्र को एक बार फिर से देखें जहां यह जाँच नहीं की गई थी।

टिप्पणियों के एक जोड़े को IMHO साझा किया जाना चाहिए, हालांकि।

  • त्रुटि संदेश स्पष्ट नहीं था कि किस ड्राइव को साझा करने की आवश्यकता है (लिनक्स एक एकल ड्राइव से अधिक का समर्थन करता है , मुझे लगता है)
  • यदि ड्राइव सी के बिना: उपलब्ध (या बूट करने योग्य ड्राइव, जहां ओएस रहता है) डॉकर कार्यात्मक नहीं होगा , तो इसकी स्थापना के बाद इस ड्राइव को खुद क्यों नहीं जांचा गया? यह डॉकर डैशबोर्ड में सिर्फ एक क्लिक ( !! ) है, इसलिए यह (अपेक्षाकृत) आसान होना चाहिए।

एक बहुत ही सरल व्याख्या क्यों यह काफी बेकार संदेश प्रदर्शित किया गया था हो सकता है - लिनक्स डेवलपर्स बहुत कुछ (सीएलआई!) टाइप करते हैं और इस बात से बहुत खुश नहीं होते हैं कि वे अपने उपयोगकर्ताओं को एक सार्थक निदान देने के लिए पर्याप्त नहीं लिखते हैं।

ठीक है, मुझे विश्वास है कि मैं सही नहीं हूं, लेकिन फिर भी एक स्पष्टीकरण होना चाहिए कि एक अंतिम उत्पाद में इतनी बड़ी चूक क्यों दिखाई देती है।


इसके अलावा, डॉकर उस ड्राइव की जाँच किए बिना पूरी तरह से कार्य कर रहा है, जब तक आप अपने स्थानीय फाइल सिस्टम से निर्देशिका को बांधने-माउंट करने की कोशिश नहीं कर रहे हैं। केवल एक चीज यह है कि वे आपके द्वारा निर्धारित नीतियों का पालन करना चाहते हैं, न कि उन्हें आपके लिए निर्धारित करें। (कल्पना करें कि एक स्क्रिप्ट जो कंटेनर में चल रही है: c: \ windows को कंटेनर में चलाता है, और तब आश्चर्यचकित हो जाता है जब आपको अपना एसएएम खाता हैश फटा हुआ लगता है ... जो केवल इसलिए अनुमति दी गई थी क्योंकि उन्होंने ड्राइव सी और साझा करने के लिए उस बॉक्स को "मदद" से चेक किया था ' t आपको इसके बारे में बताते हैं।)
sjcaged

1

लंबे "docker run ... / dev / null" कमांड को आउटपुट से बाहर खींचें और इसे docker सक्षम कमांड प्रॉम्प्ट पर स्वयं चलाएं। डॉकर डेस्कटॉप को फिर साझाकरण / नेटवर्क एक्सेस की अनुमति देने के लिए संकेत देना चाहिए। ऐसा करने से पहले आप डॉकर डेस्कटॉप ऐप को फिर से शुरू करना चाह सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.