2025/01/26

[ASP.NET Core] 如何在 ASP.NET Core 專案中的 Dockerfile 設定預設時區

問題

在開發 ASP.NET Core 專案時,Docker Image 預設的時區是 UTC,可以把時區預設定在 Asia/Taipei 嗎?

環境

  • Windows 11
  • Visual Studio 2022 (v17.12.4)
  • ASP.NET Core (.NET 8)

解決方法

在 Dockerfile 的 base 上加一段 ENV TZ=Asia/Taipei

(有試過加在 final 上,但是在 Visual Studio 開發時並不會正確載入,發佈到 Azure Web App for Containers 確認是有正確載入時區的)

而且 Image 要選 dotnet/aspnet:8.0 不要選 dotnet/aspnet:8.0-jammy-chiseled (不能因為佔空間才選它,它是不包含 tzdata 套件的)

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER app
WORKDIR /app
ENV TZ=Asia/Taipei     # 加 TZ 這一個變數
EXPOSE 8080
EXPOSE 8081

...

若是不想要變更 Dockerfile 的設定,在 Visual Studio 開發,可以修改 launchSettings.json 檔案

在 Dockerfile 的 environmentVariables 加上 TZ 的參數

執行 docker run 的命令會帶入 TZ 的環境變數值

在 Azure App Service 如何設定時區

App Service: 設定 / 環境變數 / 應用程式設定

Windows OS

  • 名稱: WEBSITE_TIME_ZONE
  • 值: Taipei Standard Time

Linux OS

  • 名稱: TZ
  • 值: Asiz/Taipei

參考連結