夫天地者,万物之逆旅;光阴者,百代之过客。而浮生若梦,为欢几何?
ASP.NET Core Docker 调试,日期时区的最终解决方案

问题描述

使用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"]


作者:暗夜余晖

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

0

支持

0

反对

posted @2020-6-11  拜读(623)

评论列表

评论内容:



喜欢请打赏

支付宝 微信

请放心支付