簡體   English   中英

發布 docker 映像時的構建選項問題

[英]Build options issue when publishing docker image

Visual Studio 在構建/運行時使用大量命令行 arguments 運行 docker。 因此,在調試和發布模式下點擊運行可以毫無問題地啟動容器。

如何使 docker 文件具有所有掛載和環境變量,以便在將容器發布到容器注冊表/存儲庫時不必提供任何這些?

我的 docker 文件如下所示:

#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/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["Service/Service.csproj", "Service/"]
COPY ["DataLayer/DataLayer.csproj", "DataLayer/"]
RUN dotnet restore "Service/Service.csproj"
COPY . .
WORKDIR "/src/Service"
RUN dotnet build "Service.csproj" -c Release -o /app/build

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

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

在 Visual Studio 中按下 Run docker 后,它會使用以下命令啟動映像:在這里您可以看到 Visual Studio 提供的所有 cmd 選項以運行容器

docker build -f "C:\Users\Jacob\source\repos\Service\Dockerfile" --force-rm -t service  --label "com.microsoft.created-by=visual-studio" --label "com.microsoft.visual-studio.project-name=Service" "C:\Users\Jacob\source\repos\Service"
docker run -dt -v "C:\Users\Jacob\vsdbg\vs2017u5:/remote_debugger:rw" -v "C:\Users\Jacob\AppData\Roaming\Microsoft\UserSecrets:/root/.microsoft/usersecrets:ro" -v "C:\Users\Jacob\AppData\Roaming\ASP.NET\Https:/root/.aspnet/https:ro" -e "ASPNETCORE_URLS=https://+:443;http://+:80" -e "ASPNETCORE_HTTPS_PORT=443" -e "ASPNETCORE_ENVIRONMENT=Development" -e "ASPNETCORE_LOGGING__CONSOLE__DISABLECOLORS=true" -p 80:80 -p 443:443 -P --name Service --entrypoint tail service -f /dev/null

當我只是在沒有所有這些 cmd 行選項的情況下將容器托管在某個地方時,它不會獲得所有安裝和命令行 arguments 到 function。 我假設所有這些都必須在發布時包含在我的 dockerfile 中? 那么我該如何設置所有這些呢?

作為參考,這是 docker 集線器在檢查容器時提供的信息:

Environment
ASPNETCORE_URLS
https://+:443;http://+:80

ASPNETCORE_HTTPS_PORT
443

ASPNETCORE_ENVIRONMENT
Development

ASPNETCORE_LOGGING__CONSOLE__DISABLECOLORS
true

PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

DOTNET_RUNNING_IN_CONTAINER
true

DOTNET_VERSION
5.0.2

ASPNET_VERSION
5.0.2

Mounts
/REMOTE_DEBUGGER
C:\Users\Jacob\vsdbg\vs2017u5

/ROOT/.MICROSOFT/USERSECRETS
C:\Users\Jacob\AppData\Roaming\Microsoft\UserSecrets

/ROOT/.ASPNET/HTTPS
C:\Users\Jacob\AppData\Roaming\ASP.NET\Https

Ports
443/tcp
localhost:443

80/tcp
localhost:80

但是當我自己運行已發布的 docker 圖像時:

Environment
PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

ASPNETCORE_URLS
http://+:80

DOTNET_RUNNING_IN_CONTAINER
true

DOTNET_VERSION
5.0.2

ASPNET_VERSION
5.0.2

Ports
443/tcp
localhost:443

80/tcp
localhost:80

Afaik,只能在啟動容器時安裝卷。 所以這可以使用 docker run -v 選項或在 docker 組合文件中。 卷不能在 docker 文件中定義。

環境變量可以使用 ENV 指令和/或 docker 運行命令在 docker 文件中定義。

暫無
暫無

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

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