Docker部署ASP.NET Core时设置TZ=Australia/NSW时区不生效如何解决
时区配置失效修复方案
根因说明
mcr.microsoft.com/dotnet/aspnet:5.0基于精简版Debian系统制作,默认未预装tzdata时区数据包,仅设置TZ环境变量无法被系统识别生效- 你当前将
TZ变量定义在base阶段的写法符合多阶段构建逻辑,配置位置没有错误
修复方法
在 base 阶段添加 tzdata 安装与时区配置命令即可,修改后的完整Dockerfile如下:
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 # 安装时区数据包并配置对应时区 RUN apt-get update \ && apt-get install -y --no-install-recommends tzdata \ && ln -sf /usr/share/zoneinfo/Australia/NSW /etc/localtime \ && echo "Australia/NSW" > /etc/timezone \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* ENV TZ=Australia/NSW FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src COPY ["Application.WebAPI/Application.WebAPI.csproj", "Application.WebAPI/"] RUN dotnet restore "Application.WebAPI/Application.WebAPI.csproj" COPY . . WORKDIR "/src/Application.WebAPI" RUN dotnet build "Application.WebAPI.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "Application.WebAPI.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "Application.WebAPI.dll"]
补充说明
如果仅用于本地测试,也可以在启动容器时直接挂载宿主机时区文件,无需修改Dockerfile,命令参考:
docker run -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro <你的镜像名称>
内容的提问来源于stack exchange,提问作者Jim_Mcdonalds
相关产品推荐
相关产品推荐

