2015-03-05 22 views
7

Tôi đang cố gắng tạo ra một hình ảnh của giải pháp ASP.NET 5 của tôi bao gồm 4 dự án. Dưới đây là cấu trúc:ASP.NET 5: docker xây dựng với giải pháp đa dự án

  • FlashTools (ASP.NET thư viện 5 lớp)
  • Models (ASP.NET 5 lớp thư viện)
  • QuizzCorrector (ASP.NET 5 Web Application)
  • QuizzService (ASP NET 5 thư viện lớp)

tôi đã một Dockerfile đơn giản mà trông như thế này:

FROM microsoft/aspnet 

COPY . /app 
WORKDIR /app 
RUN ["kpm", "restore"] 

EXPOSE 5004 
ENTRYPOINT ["k", "kestrel"] 

Nhưng không chắc phải đặt nó ở đâu. Trong thư mục gốc của giải pháp của tôi, nơi global.json nằm trong thư mục Ứng dụng Web của tôi, nơi project.json của tôi là? Tất nhiên tôi đã sửa đổi nó tùy thuộc vào nơi tập tin này được đặt.

Dù sao cả hai dường như làm việc vì nó tải về tất cả các thư viện tôi cần khi tôi chạy lệnh

Docker xây dựng quizzcorrector -t.

Vấn đề của tôi là tại một thời điểm Docker nói với tôi

Không thể xác định vị trí Models> = 1.0.0

Không thể xác định vị trí FlashTools> = 1.0.0

Không thể xác định vị trí QuizzService> = 1.0.0

Tôi đã xem trên chủ đề này https://github.com/aspnet/aspnet-docker/issues/19 rằng tôi n một giải pháp đa dự án, chúng ta nên chạy lệnh "gói kpm" để đóng gói ứng dụng của tôi thành một biểu mẫu có thể triển khai và chạy được.

tôi không thể tìm thấy bất kỳ ví dụ về Dockerfiles với lệnh pack KPM, chỉ tài liệu: https://github.com/aspnet/Home/wiki/Package-Manager

Tôi cũng đã thử tất nhiên để sử dụng ADD hoặc COPY lệnh trong Dockerfile tôi để sao chép nội dung của dự án của tôi vào hệ thống tệp của vùng chứa, nhưng vẫn là lỗi tương tự.

Thank của bạn đã giúp tôi

Trả lời

17

Cập nhật: ngày 14 tháng 2 năm 2018

câu trả lời trước đây của tôi không mất trong tài khoản thực hiện những điều tốt nhất cho văn bản Dockerfile. Nó cũng không hoạt động cho những giải pháp có nhiều dự án web mà mỗi ứng dụng phải chạy trong một thùng chứa Docker riêng biệt. Cách tốt hơn là xây dựng và phát hành ứng dụng ASP.NET Core trong môi trường phát triển và chạy ứng dụng trong thùng chứa Docker được tối ưu hóa để sử dụng sản xuất.

  1. Tạo Dockerfile trong thư mục ứng dụng web
  2. Đặt nội dung sau vào nó

    FROM microsoft/aspnetcore 
    
    COPY ./publish /publish 
    WORKDIR /publish 
    EXPOSE 5000/tcp 
    ENTRYPOINT ["dotnet", "QuizzCorrector.dll"] 
    
  3. xây dựng và công bố dự án bằng cách chạy dotnet publish -c Release -o publish
  4. Xây dựng Docker hình ảnh bằng cách chạy docker build -t QuizzCorrector

Lưu ý rằng microsoft/aspnetcore Hình ảnh Docker là hình ảnh chỉ có thời gian chạy không cung cấp .NET Core SDK, điều làm cho nó nhẹ hơn và tốt hơn cho việc sử dụng sản xuất.


Có thể trễ, nhưng tôi sẽ trả lời câu hỏi này cho những người vẫn đang cố gắng làm cho nó hoạt động. Bạn cần tạo một Dockerfile ở cấp độ giải pháp. Sau đó, bạn cần cập nhật thư mục làm việc của mình để sử dụng thư mục nơi bạn dự án web. Dưới đây là Dockerfile cuối cùng trong tài khoản mà kpmk utilites đã được thay thế bằng một công cụ dotnet.

FROM microsoft/dotnet:latest 

COPY . /app 
WORKDIR /app/src/QuizzCorrector 
RUN ["dotnet", "restore"] 

EXPOSE 5004 
ENTRYPOINT ["dotnet", "run"] 

+0

9 tháng sau đó, tôi cuối cùng đã thử nghiệm phương pháp này và nó hoạt động tuyệt vời. Cảm ơn :-) –

+0

Cảm ơn bạn. Phải mất 2 ngày để tìm ra giải pháp này. – zaidorx

+0

Điều gì sẽ xảy ra nếu bạn có hai dự án trong giải pháp của mình và bạn muốn chúng được xuất bản dưới dạng hai ứng dụng web khác nhau. Bạn có thể làm cho nó hoạt động nếu dockerfile của bạn KHÔNG ở cấp độ giải pháp? Tôi cần chúng ở trong các dự án riêng ... – Reft

0

Để có thể xây dựng và chạy nhiều xproject trong DockerHub với ASP.NET CORE 1.0, tôi nhận được một vấn đề tương tự như vậy. Điều này dẫn tôi đến đây và giúp tôi. Giải pháp của tôi là thế này:

cấu trúc Giải pháp

``` 

Root 
│ AuthenticationService.sln 
│ Dockerfile  
│ 
└───src 
│ │ 
│ └───AuthenticationService 
│ └───DataAccess 
│ └───EntityDataModels 
│ └───Services 
. 

Dockerfile:

FROM microsoft/dotnet:latest 
COPY . /app 
WORKDIR /app/src/AuthenticationService 
RUN ["dotnet", "restore"] 

WORKDIR /app/src/DataAccess 
RUN ["dotnet", "restore"] 

WORKDIR /app/src/EntityDataModels 
RUN ["dotnet", "restore"] 

WORKDIR /app/src/Services 
RUN ["dotnet", "restore"] 

WORKDIR /app/src/AuthenticationService 
RUN ["dotnet", "build"] 

EXPOSE 5000/tcp 
ENV ASPNETCORE_URLS http://*:5000 

ENTRYPOINT ["dotnet", "run"] 
0

Đối với tương lai tham khảo & ai có cùng một vấn đề. Microsoft phát hành một ứng dụng DotNet lõi mẫu với container Docker DotNet kiến ​​trúc/Dự án eShopOnContainers here

Bạn có thể tham khảo liên kết hoặc tìm Ví dụ dưới đây

Ví dụ:

FROM microsoft/aspnetcore:2.0 AS base 
WORKDIR /app 
EXPOSE 80 

FROM microsoft/aspnetcore-build:2.0 AS build 
WORKDIR /src 
COPY eShopOnContainers-ServicesAndWebApps.sln ./ 
COPY src/Services/Basket/Basket.API/Basket.API.csproj src/Services/Basket/Basket.API/ 
COPY src/BuildingBlocks/HealthChecks/src/Microsoft.AspNetCore.HealthChecks/Microsoft.AspNetCore.HealthChecks.csproj src/BuildingBlocks/HealthChecks/src/Microsoft.AspNetCore.HealthChecks/ 
COPY src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/Microsoft.Extensions.HealthChecks.csproj src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/ 
COPY src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.csproj src/BuildingBlocks/EventBus/EventBusRabbitMQ/ 
COPY src/BuildingBlocks/EventBus/EventBus/EventBus.csproj src/BuildingBlocks/EventBus/EventBus/ 
COPY src/BuildingBlocks/EventBus/EventBusServiceBus/EventBusServiceBus.csproj src/BuildingBlocks/EventBus/EventBusServiceBus/ 
RUN dotnet restore 
COPY . . 
WORKDIR /src/src/Services/Basket/Basket.API 
RUN dotnet build -c Release -o /app 

FROM build AS publish 
RUN dotnet publish -c Release -o /app 

FROM base AS final 
WORKDIR /app 
COPY --from=publish /app . 
ENTRYPOINT ["dotnet", "Basket.API.dll"] 
Các vấn đề liên quan