首页 > 解决方案 > Kubernetes 不采用 dockerfile 时区

问题描述

我有下一个 docker 文件,我在其中定义了 America/Bogota 的 timeZone,然后 Azure 管道构建的图像我可以在日志中看到的日期在 dockerfile 中是正确的,但是当我在 azure Kubernetes 中执行 pod 时,时区是不同的。为什么 kubernetes pod 不采用美国/波哥大时区?

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src

COPY NuGet.Config ./
COPY NugetPackage/travelExpensesRestClient.1.0.0.nupkg NugetPackage/
RUN dir /src/NugetPackage

COPY microservicioX/microservicioX.csproj microservicioX/
COPY travelExpenses.Viajes.Proxy/travelExpenses.Viajes.Proxy.csproj travelExpenses.Viajes.Proxy/

RUN dotnet restore -nowarn:msb3202,nu1503  microservicioX/microservicioX.csproj #--verbosity diag
COPY . .
WORKDIR /src/microservicioX
RUN dotnet build -c Release -o /app

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


WORKDIR /
ENV TZ=America/Bogota
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN date


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

有关更多详细信息:在天蓝色管道中,我可以看到正确的时区 https://i.ibb.co/wgSzHS9/Time-Zone-build-Image.png

azure kubernetes pod 中的时区 https://i.ibb.co/hm25Xkc/Time-Zone-in-Pod.png

标签: dockerkubernetes.net-core

解决方案


我认为您可能正在以不同的图像定义 TZ

这是publish图像:

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


WORKDIR /
ENV TZ=America/Bogota
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN date

这就是你设置 TZ 的地方。这是final应用程序运行的图像:

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

您没有在此处设置 TZ。我认为,就像您在publish图像中所做的那样在此处添加 TZ 就足够了。


推荐阅读