Docker: Ổ đĩa chưa được chia sẻ


15

Khi "neo" một ứng dụng ASP.NET Core 3.1 MVC tôi đã nhận được kết quả như sau:

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.

Không cần phải nói ' docker run --help ' hoàn toàn không giúp ích (thiếu liên kết / neo trong tài liệu Docker, v.v.).

Một số thông tin bổ sung:

  • Ứng dụng là những gì giàn giáo VS2019 mà không cần sửa đổi .
  • Hình ảnh Docker là Linux ( cái mà tôi không thể biết ).
  • Phiên bản Docker là 19.03.5, bản dựng 633a0ea

Vì tôi không quen với Linux, nên lỗi này hóa ra giống như một "công cụ chặn hiển thị" đối với tôi. Có lẽ Linux không được hướng dẫn gắn ổ đĩa? Nhưng cái nào? Tin nhắn không nói lên điều đó ...

Có lẽ Windows phải chia sẻ một ổ đĩa, hoặc ánh xạ một thư mục vào một ổ đĩa cần được chia sẻ? Tin nhắn cũng không nói điều này ...

Dưới đây là ảnh chụp màn hình của bảng điều khiển Docker:

nhập mô tả hình ảnh ở đây

Và đây là 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"]

Bất kì sự trợ giúp nào đều được đánh giá cao. Cảm ơn trước!

Câu trả lời:


15

Lệnh chạy docker bao gồm các khối từ ổ C, vd -v "C:\Users\admin\vsdbg\vs2017u5:/remote_debugger:rw". Để những thứ này hoạt động, bạn cần bao gồm ổ C trong các ổ đĩa chung của mình (đánh dấu vào ô bên dưới cài đặt -> tài nguyên -> chia sẻ tệp). Bạn cũng có thể di chuyển các tệp được chia sẻ vào ổ D đã được chia sẻ với VM nhúng, mặc dù đó có thể không phải là một tùy chọn trong trường hợp này. Để biết ổ đĩa nào để chia sẻ, hãy kiểm tra các ổ đĩa được sử dụng trong mount mount âm lượng trong lệnh chạy.

Trong các phiên bản trước của docker cho Windows, điều này sẽ âm thầm thành công và gắn một thư mục trống vào thùng chứa. Vì vậy, lỗi cho người dùng kiểm tra các ổ đĩa được chia sẻ trước tiên là một cải tiến tốt đẹp.


C: là ổ đĩa khởi động của tôi và hệ điều hành được cài đặt trên nó. Bạn có thực sự nghĩ rằng đó là một thực hành tốt để chia sẻ một thông tin nhạy cảm như vậy?
Alexander Christov

@AlexanderChristov ổ đĩa được chia sẻ với VM nhúng cho phép bạn gắn các thư mục từ đó vào trong thùng chứa. Bạn không thể nói rằng bạn không muốn chia sẻ ổ đĩa trong khi cũng muốn chạy các lệnh yêu cầu quyền truy cập vào các thư mục trên ổ đĩa đó. Đây không phải là vấn đề về docker, đây là vấn đề với lệnh bạn yêu cầu docker chạy.
BMitch

vẫn "Xem 'docker run --help'." là khá vô dụng. Trong thực tế, nó có phần có hại vì dẫn đến lãng phí thời gian, mà bạn có thể thấy dẫn đến việc đặt câu hỏi. dù sao cũng cảm ơn.
Alexander Christov

@AlexanderChristov đó là một thông báo chung cho bất kỳ lệnh nào không thành công, cho bạn biết văn bản trợ giúp của tiểu ban nào có thể có liên quan. Không chắc chắn làm thế nào để điều chỉnh điều đó để bao gồm mọi điều kiện lỗi có thể. Các 500: {"Message":"Unhandled exception: Drive has not been shared"}thông điệp rằng kích hoạt lỗi là một phần hữu ích.
BMitch

Xem phần này để biết nơi nào / khi họ tạo ra --helplời nhắc đó : github.com/moby/moby/blob/
mẹo

8

Tạo ổ đĩa C: có sẵn cho các container Docker từ Bảng điều khiển Docker đã giải quyết vấn đề , hãy nhìn vào hình ảnh một lần nữa khi nó không được kiểm tra.

Tuy nhiên, một vài ý kiến ​​phải được chia sẻ IMHO.

  • Thông báo lỗi không rõ ổ đĩa nào cần chia sẻ ( tôi đoán là Linux hỗ trợ nhiều hơn một ổ đĩa )
  • Nếu không có ổ C: có sẵn (hoặc ổ đĩa có khả năng khởi động, ổ đĩa có hệ điều hành) Docker sẽ không hoạt động , tại sao sau khi cài đặt, nó không tự kiểm tra ổ đĩa? Đây chỉ là một cú nhấp chuột ( !! ) trong Bảng điều khiển Docker, vì vậy nó sẽ (tương đối) dễ dàng.

Một lời giải thích rất đơn giản tại sao thông báo khá vô dụng này được hiển thị có thể tồn tại - Các nhà phát triển Linux gõ rất nhiều (CLI!) Và không hài lòng với điều này, họ không gõ đủ để đưa ra chẩn đoán có ý nghĩa cho người dùng của họ.

Vâng, tôi tin rằng tôi không đúng, nhưng vẫn phải có một lời giải thích tại sao một thiếu sót lớn như vậy xuất hiện trong một sản phẩm cuối cùng.


Ngoài ra, Docker hoàn toàn hoạt động mà không cần kiểm tra ổ đĩa đó, miễn là bạn không cố gắng liên kết gắn kết một thư mục từ hệ thống tệp cục bộ của bạn. Điều duy nhất là họ muốn tuân theo các chính sách bạn đặt và không đặt chúng cho bạn. (Hãy tưởng tượng mù quáng chạy tập lệnh gắn c: \ windows vào container và sau đó ngạc nhiên khi bạn thấy tài khoản SAM của bạn bị bẻ khóa ... điều đó chỉ được phép vì họ đã "kiểm tra" một cách hữu ích hộp đó để chia sẻ ổ C và không ' t nói với bạn về điều đó.)
sjcaged

1

kéo lệnh "docker run ... / dev / null" dài ra khỏi đầu ra và tự chạy nó tại dấu nhắc lệnh kích hoạt docker. Docker desktop sau đó sẽ nhắc để cho phép chia sẻ / truy cập mạng. Bạn có thể muốn khởi động lại ứng dụng Docker Desktop trước khi làm như vậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.