如何修改DOCKERFILE以将wget安装到kubernetes吊舱中?

如何修改DOCKERFILE以将wget安装到kubernetes吊舱中?,docker,kubernetes,dockerfile,devops,Docker,Kubernetes,Dockerfile,Devops,现在,我的DOCKERFILE构建了一个dotnet映像,该映像在Kubernetes集群中自己的pod中安装/更新并运行 FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base ARG DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true ARG DOTNET_CLI_TELEMETRY_OPTOUT=1 WORKDIR /app FROM mcr.microsoft.com/dotnet/core/sdk:3.1

现在,我的DOCKERFILE构建了一个dotnet映像,该映像在Kubernetes集群中自己的pod中安装/更新并运行

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
ARG DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
ARG DOTNET_CLI_TELEMETRY_OPTOUT=1
WORKDIR /app

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
ARG DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
ARG DOTNET_CLI_TELEMETRY_OPTOUT=1
ARG ArtifactPAT
WORKDIR /src

RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/*

COPY /src .

RUN dotnet restore "./sourceCode.csproj" -s "https://api.nuget.org/v3/index.json"

RUN dotnet build "./sourceCode.csproj" -c Release -o /app

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "SourceCode.dll"]
EXPOSE 80
集群非常简单,不包括curl和wget。因此,我需要在pod/集群中安装wget或curl来执行脚本命令,这些命令被设置为在部署和启动完成后自动运行。执行安装的命令:

RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/*
在DOCKERFILE中,似乎没有做任何事情来安装在Kubernetes集群中。在构建运行和部署之后,如果我要执行pod并尝试运行

wget --help 

我知道wget不存在。我没有很多构建DOCKERFILEs的经验,所以我真的被难倒了。我希望在DOCKERFILE中自动执行此操作,因为我将无法登录到我们测试以上的环境中手动执行安装

它与库伯内特斯和豆荚无关。实际上你不能在库伯内特斯吊舱上安装任何东西。您可以将包安装到在pod上运行的容器中

您的问题是,将wget安装到构建映像中。当您使用下面的图像时,您丢失了所有已安装的软件包。因为这些包属于构建映像。构建、基础和最终它们是不同的映像。您需要像复制最终映像一样显式复制文件。像这样

  COPY --from=publish /app .
因此,将下面的命令添加到最终图像中,您可以毫无问题地使用wget

RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/*
有关更多信息和最佳实践,请参阅此链接。
以下各项之间的所有内容:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
ARG DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
ARG DOTNET_CLI_TELEMETRY_OPTOUT=1
WORKDIR /app
以及:

这无关紧要。使用该行,您可以从第一个块中定义的
base
开始构建新图像

(顺便说一句,在下一行,您不必要地复制了
WORKDIR
语句。此外,
final
是您将用于引用
base
的名称,它不是此最终定义的图像的名称,因此这没有真正意义-您不想这样做,例如
COPY--from=final


您需要在
base
映像中安装
wget
,或者在最后一个定义的映像中安装
wget
;这与库伯内特斯或德沃斯无关。”集群“从不包含”curl和wget,这句话没有意义,pod也没有意义。您需要在图像中设置
wget
。(它运行在一个容器中,其中一个pod有多个节点,而一个集群是多个节点,每个节点临时运行多个pod。)
FROM base AS final