針對 Azure SQL Edge 部署進行疑難排解

重要

Azure SQL Edge 不再支援 ARM64 平台。

本文提供與部署和使用 Azure SQL Edge 容器時可能看到的錯誤有關的資訊,並提供疑難排解技術來協助解決這些問題。

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=yourStrong(!)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.mdfmastlog.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 部署。 在啟用偵錯記錄後,請嘗試重現問題,並檢查記錄中是否有任何相關的訊息或例外狀況。

注意

「詳細資訊記錄」選項只能用於疑難排解,而不能用於一般的生產工作負載。

下一步