Datetime.Now 在docker中不正确 的解决方式
Datetime.Now 在docker中不正确 的解决方式
在dotnet5及以前的版本中都没有出现
现象
dotnet 6版本运行在docker中,Datetime.Now
中显示不正确 (东八区少了8小时)。
-v /etc/localtime:/etc/localtime
不再起作用。
解决方式
1. 指定 TZ
在dockerfile中指定localtime
FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base
#省略#
FROM base AS final
WORKDIR /app
# 这里声明变量TZ
ENV TZ=Asia/Shanghai
# 指定localtime
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "xxx.dll"]
声明变量TZ
:默认Asia/Shanghai
, 如果要指定其他时区,可以在 docker run
时 指定 -e TZ=……
,
或者不声明变量TZ
, docker run -e /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
。
不清楚时区的可以查看 ls /usr/share/zoneinfo