繁体   English   中英

如何修改我的 DOCKERFILE 以将 wget 安装到 kubernetes pod 中?

[英]How do I modify my DOCKERFILE to install wget into kubernetes pod?

现在,我的 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/cluster 中安装 wget 或 curl 以执行设置为在部署和启动完成后自动运行的脚本命令。 执行安装的命令:

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

DOCKERFILE 内的安装在 Kubernetes 集群中似乎没有任何作用。 在构建运行和部署之后,如果我要执行到 pod 并尝试运行

wget --help 

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

它与 kubernetes 或 pods 无关。 实际上你不能在 kubernetes pod 上安装任何东西。 您可以将软件包安装到在 pod 上运行的容器中。

您的问题是,您将 wget 安装到您的构建映像中。 当您使用下面的图片时,您丢失了所有已安装的软件包。 因为这些包属于构建映像。 build, base, final 它们是不同的图像。你需要像做最终图像一样明确地复制文件。 像这样

  COPY --from=publish /app .

因此,将下面的命令添加到您的最终图像中,您就可以毫无问题地使用 wget。

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

有关更多信息&&最佳实践,请参阅此链接。
https://www.docker.com/blog/intro-guide-to-dockerfile-best-practices/

之间的一切:

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 base AS final

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

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

最后,您需要在base映像或最后定义的实际运行的映像中安装wget

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM