问题描述
使用docker 调试 .NET Core 3.1 项目,发现容器中的时间是UTC时间,导致数据库写入的时间和本地电脑时间不同,即不是 CST 时间,和正常时间差了 8个小时。
问题成因
造成该问题的直接原因是 dockerfile 构建使用的镜像是 aspnet:3.1-bionic,该镜像尚未安装 tzdata 软件包,导致镜像中的 ubuntu 系统无法设置时区。
分析出问题原因之后,笔者尝试在 dockerfile 文件中安装 tzdata ,并最终成功解决。
解决方案
dockerfile 文件部分内容:
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic AS base WORKDIR /app EXPOSE 80 #设置时间为中国上海 ENV TZ=Asia/Shanghai ENV DEBIAN_FRONTEND noninteractive # 设置包源为阿里 RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list \ && apt-get clean # 安装 tzdata 软件包 RUN apt-get update \ && apt-get install -y tzdata \ && ln -fs /usr/share/zoneinfo/$TZ /etc/localtime \ && rm -rf /var/lib/apt/lists/ \ && dpkg-reconfigure -f noninteractive tzdata FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic AS build WORKDIR /src # 此处忽略项目的编译和发布代码 FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "xxxx.dll"]
评论列表
评论内容: