【问题标题】:.net core image failes on build when using alpine instead of aspnet:3.1.net 核心映像在使用 alpine 而不是 aspnet:3.1 时构建失败
【发布时间】:2020-11-28 21:01:41
【问题描述】:

我有工作的 Dockerfile 内容

    FROM mcr.microsoft.com/dotnet/core/sdk:3.1 as build
    WORKDIR /app 
    
    # copy csproj and restore as distinct layers
    COPY ./Honda.Domain/Honda.Domain.csproj ./Honda.Domain/
    COPY ./Honda.API/Honda.API.csproj Honda.API/
    
    RUN dotnet restore Honda.API/Honda.API.csproj
    
    # copy everything else and build app
    COPY . ./
    WORKDIR /app/Honda.API/
    RUN dotnet publish -c Release -o publish/
    
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
    WORKDIR /app
    COPY --from=build /app/Honda.API/publish  .
    
    ENV ASPNETCORE_URLS=https://+:5001;http://+:5000 
    ENTRYPOINT ["dotnet", "Honda.API.dll"]

但是当我尝试使用 alpine 图像而不是 aspnet:3.1 优化图像时

    FROM mcr.microsoft.com/dotnet/core/sdk:3.1 as build
    WORKDIR /app 
    
    # copy csproj and restore as distinct layers
    COPY ./Honda.Domain/Honda.Domain.csproj ./Honda.Domain/
    COPY ./Honda.API/Honda.API.csproj Honda.API/
    
    RUN dotnet restore Honda.API/Honda.API.csproj
    
    # copy everything else and build app
    COPY . ./
    WORKDIR /app/Honda.API/

    RUN dotnet publish -c Release -o publish/

    FROM alpine:3.9.4 #**************************** change 1 ***************
    # Add some libs required by .NET runtime 
    RUN apk add --no-cache libstdc++ libintl icu #* change 2***************

    WORKDIR /app
    COPY --from=build /app/Honda.API/publish  .
    
    ENV ASPNETCORE_URLS=https://+:5001;http://+:5000 
    ENTRYPOINT ["dotnet", "Honda.API.dll"]

但第二张图片我在docker-compose up --build 上遇到错误

错误:对于 honda-api 无法启动服务 honda-api:OCI 运行时创建失败:container_linux.go:349:启动容器 进程导致“exec:”dotnet“:$PATH 中找不到可执行文件”: 未知错误:启动项目时遇到错误。

有什么想法吗?

【问题讨论】:

标签: .net docker .net-core


【解决方案1】:
FROM alpine:3.9.4 #**************************** change 1 ***************

https://hub.docker.com/_/alpine - 引用此链接

Alpine Linux 是一个 Linux 发行版。图像只有 5 MB 大小。 所以你基本上只有一台 Linux vanilla 机器.. 您必须安装 .NET Core 运行时。

现在当你RUN apk add 序列时你是对的,但这还不够。 在设置功能齐全的 .NET Core 运行时之前,您将拥有更多 apk add

顺便说一句,这也违反了 docker 哲学。 docker 的理念是让技术的创造者为你创建一个基础镜像。由所有者创建图像,您将始终确保它有效。

当您完全专注于开发您的应用程序时。 在您的情况下,Microsoft 的 .NET Core 图像。我推荐docker pull mcr.microsoft.com/dotnet/runtime

如果您想要较小的映像,请选择 .NET Core 运行时映像。我最后一次检查它大约是 200MB,它具​​有运行 .net 核心 dll 或 exe 的一切。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多