Docker: Drive paylaşılmadı


15

Bir ASP.NET Core 3.1 MVC uygulaması "dockerizing" aşağıdaki sonucu aldım:

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.

Tabii ki ' docker run --help ' yardımcı olmadı (Docker belgelerindeki eksik bağlantılar / çapalar vs.).

Bazı ek bilgiler:

  • Uygulama VS2019 herhangi bir değişiklik yapmadan iskeleleri olduğunu .
  • Docker görüntüsü Linux'tur ( hangisini söyleyemem ).
  • Docker sürümü 19.03.5, yapı 633a0ea

Linux'a aşina olmadığım için bu hata bana bir "gösteri durdurucu" gibi geliyor. Belki Linux'a bir sürücü takması talimatı verilmez? Fakat hangisi? Mesaj söylemiyor ...

Belki Windows bir sürücüyü paylaşmak veya bir klasörü paylaşılması gereken bir sürücüye eşlemek zorunda? Mesaj da bunu söylemiyor ...

Docker kontrol panelinin ekran görüntüsü:

resim açıklamasını buraya girin

Ve işte Dockerfile:

#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"]

Herhangi bir yardım çok takdir edilecektir. Şimdiden teşekkürler!

Yanıtlar:


15

Docker run komutu, C sürücüsünden birimler içerir, örn -v "C:\Users\admin\vsdbg\vs2017u5:/remote_debugger:rw". Bunların çalışması için C sürücüsünü paylaşılan sürücülerinize eklemeniz gerekir (ayarlar -> kaynaklar -> dosya paylaşımı altındaki kutuyu işaretleyin). Paylaşılacak dosyaları zaten katıştırılmış VM'de zaten paylaşılan D sürücüsüne taşıyabilirsiniz, ancak bu durumda bu bir seçenek olmayabilir. Hangi sürücülerin paylaşılacağını bilmek için, run komutundaki birim bağlantılarında kullanılan sürücüleri kontrol edin.

Windows için docker'ın önceki sürümlerinde, bu sessizce başarılı olur ve kap içine boş bir klasör bağlardı. Bu nedenle, kullanıcılara önce paylaşılan sürücüleri kontrol etmelerini söyleyen hata hoş bir gelişmedir.


C: önyükleme sürücüm ve işletim sistemi yüklü. Gerçekten böyle hassas bir bilgiyi paylaşmanın iyi bir uygulama olduğunu düşünüyor musunuz?
Alexander Christov

@AlexanderChristov sürücü, dizinleri konteynere monte etmenizi sağlayan gömülü VM ile paylaşılır. Sürücüyü paylaşmak istemediğinizi ve aynı zamanda o sürücüdeki dizinlere erişim gerektiren komutları çalıştırmak istediğinizi söyleyemezsiniz. Bu bir liman işçisi sorunu değil, liman görevlisinin çalıştırmasını istediğiniz komutla ilgili bir sorundur.
BMitch

hala "Bkz. 'docker run --help'." oldukça işe yaramaz. Aslında biraz zararlıdır, çünkü görebileceğiniz gibi, soruyu sormaya yol açan saf bir zaman kaybına yol açar. neyse, teşekkürler.
Alexander Christov

@AlexanderChristov, hangi alt komut yardım metninin alakalı olabileceğini size bildirerek başarısız olan herhangi bir komut için genel bir mesajdır. Olası her hata koşulunu kapsayacak şekilde nasıl ayarlanacağından emin değilim. 500: {"Message":"Unhandled exception: Drive has not been shared"}Hatayı tetikleyen mesaj yararlı bir parçasıdır.
BMitch

Bu --helpistemi nerede / ne zaman ürettikleri için bunu görün : github.com/moby/moby/blob/…
BMitch

8

Docker Kontrol Panelinden C: sürücüsünü Docker kapsayıcıları için kullanılabilir hale getirmek sorunu çözdü , resme kontrol edilmediği bir kez daha bakın.

Ancak IMHO'nun birkaç yorumu paylaşılmalıdır.

  • Hata mesajı hangi sürücünün paylaşılması gerektiği konusunda net değildi (Linux tek bir sürücüden fazlasını destekliyor , sanırım)
  • C sürücüsünü kullanılabilir yapmadan (veya işletim sisteminin bulunduğu önyüklenebilir sürücü) Docker işlevsel olmazsa , kurulumundan sonra neden sürücünün kendisini kontrol etmedi? Bu, Docker Dashboard'daki sadece bir tıklama ( !! ), bu nedenle (nispeten) kolay olmalıdır.

Bu oldukça yararsız mesajın neden gösterildiğine dair çok basit bir açıklama var - Linux geliştiricileri çok fazla yazıyor (CLI!) Ve bundan çok memnun değiller, kullanıcılarına anlamlı bir teşhis vermek için yeterince yazmıyorlar.

Haklı olmadığımı düşünüyorum, ama yine de son üründe böyle büyük bir ihmalin neden ortaya çıktığı konusunda bir açıklama olmalı .


Ayrıca, yerel dosya sisteminizden bir dizini bağlamaya çalışmadığınız sürece Docker, bu sürücüyü kontrol etmeden tamamen işlevseldir. Tek şey, belirlediğiniz politikaları takip etmek ve sizin için belirlememek istemeleridir. (Kapsayıcıya c: \ windows bağlayan bir komut dosyasını körü körüne çalıştırdığınızı ve sonra SAM hesabınızın karmalarını kırık bulduğunuzda şaşırdığınızı hayal edin ... buna yalnızca C sürücüsünü paylaşmak için kutuyu "yardımcı olarak" işaretledikleri ve yapmadığı için izin verildi. bunun hakkında size).
sjcaged

1

uzun "docker run ... / dev / null" komutunu çıktıdan çıkarın ve docker özellikli bir komut isteminde tek başına çalıştırın. Docker masaüstünün paylaşım / ağ erişimine izin vermesini istemesi gerekir. Bunu yapmadan önce Docker Masaüstü uygulamasını yeniden başlatmak isteyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.