问题描述
使用docker 调试 .NET Core 3.1 项目,发现容器中的时间是UTC时间,导致数据库写入的时间和本地电脑时间不同,即不是 CST 时间,和正常时间差了 8个小时。
问题成因
造成该问题的直接原因是 dockerfile 构建使用的镜像是 aspnet:3.1-bionic,该镜像尚未安装 tzdata 软件包,导致镜像中的 ubuntu 系统无法设置时区。
分析出问题原因之后,笔者尝试在 dockerfile 文件中安装 tzdata ,并最终成功解决。
解决方案
dockerfile 文件部分内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #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" ] |