針對 Azure SQL Edge 部署進行疑難排解
重要
Azure SQL Edge 將於 2025 年 9 月 30 日淘汰。 如需詳細資訊和移轉選項,請參閱淘汰通知。
注意
Azure SQL Edge 不再支援 ARM64 平台。
本文提供與部署和使用 Azure SQL Edge 容器時可能看到的錯誤有關的資訊,並提供疑難排解技術來協助解決這些問題。
Azure SQL Edge 支援兩種部署模式:
透過 Azure IoT Edge 建立的已連線部署:Azure SQL Edge 可部署為 Azure IoT Edge 的模組。 如需詳細資訊,請參閱部署 Azure SQL Edge。
已中斷連線的部署:Azure SQL Edge 容器映像可從 Docker Hub 提取,並部署為獨立容器或部署在 Kubernetes 叢集上。 如需詳細資訊,請參閱使用 Docker 部署 Azure SQL Edge 和在 Kubernetes 中部署 Azure SQL Edge 容器。
針對 IoT Edge 裝置和部署進行疑難排解
如果在透過 Azure IoT Edge 部署 SQL Edge 時收到錯誤,請確定 iotedge
服務已正確設定並正在執行。 針對與 Azure IoT Edge 相關的問題進行疑難排解時,下列文件會很有用:
Docker 命令錯誤
如果您收到有關任何 docker
命令的錯誤,請確定 Docker 服務正在執行,並嘗試以提升的權限執行。
例如,在 Linux 上,您可能會在執行 docker
命令時收到下列錯誤:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
如果您在 Linux 上收到此錯誤,請嘗試執行前面已加上 sudo
的相同命令。 如果失敗,請確認 Docker 服務正在執行,並視需要啟動它。
sudo systemctl status docker
sudo systemctl start docker
在 Windows 上,確認您是以系統管理員身分啟動 PowerShell 或命令提示字元。
Azure SQL Edge 容器啟動錯誤
如果 SQL Edge 容器無法執行,請嘗試進行下列測試:
如果您使用 Azure IoT Edge,請確定您已成功下載模組映像,而且已在模組資訊清單中正確指定環境變數和容器建立選項。
如果您使用 Docker 或 Kubernetes 型部署,請確定
docker run
命令的格式正確。 如需詳細資訊,請參閱使用 Docker 部署 Azure SQL Edge 和在 Kubernetes 中部署 Azure SQL Edge 容器。若收到如
failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use.
的錯誤,即表示正在嘗試將容器連接埠 1433 對應到已在使用中的連接埠。 如果您在主機電腦上本機執行 SQL Edge,就會發生這種情況。 如果您啟動兩個 SQL Edge 容器,並嘗試將它們都對應到相同的主機連接埠,也可能發生此問題。 如果發生這種情況,請使用-p
參數,將容器連接埠 1433 對應到不同的主機連接埠。 例如:sudo docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=1' -e 'MSSQL_SA_PASSWORD=<password>' -p 1433:1433 --name azuresqledge -d mcr.microsoft.com/azure-sql-edge-developer.
若在嘗試啟動容器時收到如
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.30tdout=1&tail=all: dial unix /var/run/docker.sock: connect: permission denied
的錯誤,請在 Ubuntu 中將使用者新增到 Docker 群組。 然後登出再重新登入,因為此變更會影響新的工作階段。usermod -aG docker $USER
檢查以查看是否有任何來自容器的錯誤訊息。
docker logs e69e056c702d
如果您使用任何容器管理軟體,請確定其支援以 root 身分執行容器程序。 容器中的 sqlservr 程序會以 root 身分執行。
根據預設,Azure SQL Edge 容器會以名為
mssql
的非根使用者身分來執行。 如果您使用掛接點或資料磁碟區來保存資料,請確定mssql
使用者具有磁碟區的適當權限。 如需詳細資訊,請參閱以非根使用者身分執行和保存資料。若 SQL Edge Docker 容器在啟動後立即結束,請檢查 Docker 記錄。 若正在 Windows 上的 PowerShell 使用
docker run
命令,請使用雙引號,而非單引號。 若是 PowerShell Core,請使用單引號。檢閱 SQL Edge 錯誤記錄。
SQL Edge 連線失敗
如果您無法連線到在容器中執行的 SQL Edge 執行個體,請嘗試下列測試:
查看
docker ps -a
輸出的STATUS
資料行,以確定您的 SQL Edge 容器正在執行。 如果沒有,則使用docker start <Container ID>
來啟動它。如果您已對應到非預設的主機連接埠 (不是 1433),請確定您會在連接字串中指定該連接埠。 您可以在
docker ps -a
輸出的PORTS
資料行中看到連接埠對應。 如需連線到 Azure SQL Edge 的詳細資訊,請參閱連線並查詢 Azure SQL Edge。如果您先前已使用對應的資料磁碟區或資料磁碟區容器部署 SQL Edge,而且現在使用現有的對應資料磁碟區或資料磁碟區容器,SQL Edge 會忽略
MSSQL_SA_PASSWORD
環境變數的值。 否則,將會使用先前設定的 SA 使用者密碼。 這是因為 SQL Edge 會重複使用對應磁碟區或資料磁碟區容器中現有的master
資料庫檔案。 如果您遇到此問題,可以使用下列選項:- 如果先前使用的密碼仍然可用,則使用先前使用的密碼來連線。
- 將 SQL Edge 設定為使用不同的對應磁碟區或資料磁碟區容器。
- 從對應磁碟區或資料磁碟區容器中移除現有的
master
資料庫檔案 (master.mdf
和mastlog.mdf
)。
檢閱 SQL Edge 錯誤記錄。
SQL Edge 設定和錯誤記錄
根據預設,SQL Edge 錯誤記錄會出現在容器內的 /var/opt/mssql/log
目錄中,而且可以使用下列任何方式來加以存取:
如果您已在建立容器時將主機目錄掛接至
/var/opt/mssql
,則可改為在主機上查看對應路徑上的log
子目錄。使用互動式命令提示字元連線到容器。 如果容器並未執行,請先啟動容器。 接著,使用互動式命令提示字元來檢查記錄。 您可透過執行
docker ps
命令來取得容器識別碼。docker start <ContainerID> docker exec -it <ContainerID> "/bin/bash"
從您容器內部的 Bash 工作階段,執行下列命令:
cd /var/opt/mssql/log cat errorlog
如果 SQL Edge 容器已啟動並執行,而且您能夠使用用戶端工具連線到執行個體,則可以使用預存程序
sp_readerrorlog
來讀取 SQL Edge 錯誤記錄的內容。
在容器中執行命令
如果您有執行中的容器,就可以在該容器內,從主機終端機執行命令。
若要取得容器識別碼,請執行:
docker ps -a
若要在容器中啟動 Bash 終端機,請執行:
docker exec -it <Container ID> /bin/bash
現在您可以執行命令,就像是在容器內部的終端機中執行一樣。 完成後,鍵入 exit
。 這會在互動式命令工作階段中結束,但您的容器會繼續執行。
啟用詳細資訊記錄
如果串流引擎的預設記錄層級未能提供足夠資訊,則可以在 SQL Edge 中啟用串流引擎的偵錯記錄。 若要啟用偵錯記錄,請將 RuntimeLogLevel=debug
環境變數新增至 SQL Edge 部署。 在啟用偵錯記錄後,請嘗試重現問題,並檢查記錄中是否有任何相關的訊息或例外狀況。
注意
「詳細資訊記錄」選項只能用於疑難排解,而不能用於一般的生產工作負載。