2025/02/21

[ASP.NET Core] 解決如何從 Docker Container 連至本機的 SQL Server

markdown ### 問題 在 Visual Studio 開發 ASP.NET Core 網站以 IIS Express 啟動時可正確連線 SQL Server 的資料庫。 近期改以 Docker 來啟動網站時,出現以下錯誤訊息:
SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)

2025/01/30

[AI] 如何在本地機器使用 DeepSeek-R1 模型

markdown ### 前言 AI 話題這幾年一直話題不斷,而前一陣子 DeepSeek 的聲量突然上升了不少,好像不研究一下不行。 今天就花了些時間,研究如何在本地執行 DeepSeek-R1 模型。 ### 安裝步驟 1. 安裝 Ollama 2. 使用 DeepSeek-R1 模型 3. 執行 Open-WebUI

2025/01/26

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

markdown ### 問題 在開發 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 的環境變數值

2025/01/24

[Azure] ASP.NET Core 專案部署到 Web App for Containers 問題除錯心得

markdown ### 前言 因為新專案要求要用 Docker,本地開發端的問題通常不大,開專案也都有 Template,往往都是實際要部署上線時會遇到一些狀況。 趁著記憶猶新,整理一下部署心得 ### 開發環境 - Windows 11 - Docker Desktop v4.37.1 - Visual Studio 2022 (v17.11.x -- 原版本忘了,因部署 Bug 問題,後來升級到 v17.12.4) - ASP.NET Core Web App (Model-View-Controller) 專案 - .NET 8.0 ### 選擇部署到 Azure 的服務 將專案部署到 Azure 上,我選擇的服務如下: - Azure Container Registry (ACR) - Azure App Service (Web App for Containers) - Azure SQL Database - Azure Storage

2025/01/23

[ASP.NET Core] 解決 ASP.NET Core 在 Linux Container 出現無法載入 libSkiaSharp 相依性問題

markdown ### 前言 一直以來開發的 ASP.NET Core 專案都是在 Windows 環境執行。最近才開始接觸開發 ASP.NET Core 專案執行於 Docker Container 的開發環境,馬上就遇到處理圖片的問題。 在 Windows 的環境下處理圖片會用到 `System.Drawing.Common`,但在 Linux 環境下是不支援的。所以在 Linux 下的圖片處理改採用 `SkiaSharp` 的套件。 SkiaSharp 這個套件在 Windows 及 Linux 都可以用,在 Windows 的開發環境已有測試套過可以正常運作,沒想到在 Linux 環境下還是噴錯了。 ### 環境 - Docker Container (預設 ASP.NET Core 專案用的 base 我改用 `aspnet:8.0-jammy-chiseled` 可減少 image size) - .NET 8.0 - NuGet 安裝套件: SkiaSharp 版本 3.116.1 ### 問題 而在使用 SkiaSharp 處理圖片的過程中出現以下錯誤訊息: ``` An unhandled exception occurred while processing the request. DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies. ``` ### 解決方式 需要再安裝 `SkiaSharp.NativeAssets.Linux.NoDependencies` 套件 特此記錄一下,供未來翻查用

2025/01/10

[Docker] 解決 permission denied 的問題

markdown ### 問題 在 Ubuntu VM 安裝 Docker 後執行 `docker info` 遇到 permission denied 的問題 錯誤訊息: ``` ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.47/info": dial unix /var/run/docker.sock: connect: permission denied errors pretty printing info ``` ### 解決方法 參考連結: [https://stackoverflow.com/questions/48957195/how-to-fix-docker-got-permission-denied-issue](https://stackoverflow.com/questions/48957195/how-to-fix-docker-got-permission-denied-issue) 指令步驟: 1. 建立 docker 群組 (若不存在的話) 2. 加入自己的帳號至 docker 群組 3. 以群組 docker 的身份登入 (無需登出再登入) ``` sudo groupadd docker sudo usermod -aG docker $USER newgrp docker ```