簡體   English   中英

如何在 docker 容器中運行 .net 項目?

[英]How to run .net project in docker container?

我有一個用 .net 編寫的項目,我用 Visual Studio 創建了 dockerfile 和 docker-compose 文件。 這些是我的步驟:解決方案資源管理器>右鍵單擊項目名稱>添加>container Orchestrator Support

我嘗試構建,但我不斷收到同樣的錯誤。 我該如何解決這個問題? 為什么會發生? 用docker打開項目的正確方法是什么

當我嘗試進行docker build. 我收到了這個錯誤:

failed to solve with frontend dockerfile.v0: failed to create LLB definition: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed

這是我自動生成的 Dockerfile:

FROM microsoft/aspnet
ARG source
WORKDIR /inetpub/wwwroot
COPY ${source:-obj/Docker/publish} .

這是我自動生成的 docker-compose.yml 文件:


services:
  educationwebsite:
    image: ${DOCKER_REGISTRY-}educationwebsite
    build:
      context: .\EducationWebSite
      dockerfile: Dockerfile

它可能不是您正在尋找的直接答案,但在生產部署中,您應該使用多階段構建。 然后,您可以使用它們構建應用程序並創建 dll 作為 output,然后在實際應用程序運行時映像/層中使用它。

我使用的多級 Dockerfile 是:

FROM mcr.microsoft.com/dotnet/aspnet:6.0.6-bullseye-slim  AS base
# We create our own non root user
RUN useradd -ms /bin/bash appuser
# We prepare application folder and adjust RW permissions
RUN mkdir -p /app; \
    chown -R appuser:appuser /app; \
    chmod go+w /app

# Basic ENV's and setting port to listen on 8080 instead 80 (non root user cant open ports that low)
ENV TZ Europe/Ljubljana
ENV ASPNETCORE_URLS=http://*:8080
EXPOSE 8080

FROM mcr.microsoft.com/dotnet/sdk:6.0.301-bullseye-slim AS build
ENV TZ Europe/Ljubljana
WORKDIR /src
COPY ["Company.RestApiTemplate.Api/Company.RestApiTemplate.Api.csproj", "Company.RestApiTemplate.Api/"]
COPY ./nuget.config .
RUN dotnet restore "Company.RestApiTemplate.Api/Company.RestApiTemplate.Api.csproj"
COPY . .
WORKDIR "/src/Company.RestApiTemplate.Api"
RUN dotnet build "Company.RestApiTemplate.Api.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "Company.RestApiTemplate.Api.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
# Copy actual application dll's
COPY --chown=appuser:appuser --from=publish /app .

#Switch to application user
USER appuser
#Launch our application
CMD ["dotnet", "Company.RestApiTemplate.Api.dll"]

所以它由四個部分組成“基礎”部分,即基礎映像准備(RUNTIME),構建是實際恢復和構建dotnet項目。 然后我們發布了發布構建的應用程序的層,最后我們有了最終的基礎擴展,我們復制了 dll 並切換到應用程序用戶並啟動服務器。 希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM