在使用 Docker 安裝 SQL Server 時,很多人可能遇到過無法通過 Navicat 等數據庫客戶端連接到容器的情況。尤其是嘗試使用
mcr.microsoft.com/mssql/server:2022-latest
鏡像時,可能會發現 Navicat一直轉圈,無法連接到數據庫。在這篇博客中,我將分享我的經歷,并給出解決方案,幫助你避免這個“坑”。
安裝 SQL Server 2022 容器
首先,我們來看看如何在 Docker 上安裝 SQL Server 2022。一般情況下,我們可以使用以下命令來運行 SQL Server 2022 容器:
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \-p 1433:1433 --name sql2022 --hostname sql2022 \-d \mcr.microsoft.com/mssql/server:2022-latest
其中,<password>
需要替換為你的 SA
用戶密碼,-p 1433:1433
將容器的 1433 端口映射到主機的 1433 端口,以便我們可以通過 Navicat 或其他客戶端連接到數據庫。
問題癥狀:Navicat 連接不上
盡管容器已經成功啟動,嘗試通過 Navicat 連接時卻發現始終處于“轉圈”狀態,無法連接到數據庫。這時,不僅 SQL Server 沒有返回任何錯誤,Docker 容器也沒有顯示出明顯的問題。
為什么會出現這個問題?
這個問題的根本原因是,mcr.microsoft.com/mssql/server:2022-latest
鏡像可能存在一些與網絡或認證相關的問題,尤其是在使用某些數據庫客戶端(如 Navicat)時,連接可能會受到阻礙。Microsoft SQL Server 2022 的某些配置可能與較老版本的兼容性有所差異,導致連接失敗。
解決方案:使用 SQL Server 2017
經過嘗試,我發現將版本降級到 SQL Server 2017 后,連接問題得到了解決。你可以使用以下命令來安裝 SQL Server 2017 版本的 Docker 容器:
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \-p 1433:1433 --name sql1 --hostname sql1 \-d \mcr.microsoft.com/mssql/server:2017-latest
這樣,你就能夠通過 Navicat 或其他數據庫客戶端順利連接到 SQL Server 數據庫了。實際上,SQL Server 2017 版本在 Docker 上的穩定性更高,尤其在處理數據庫連接時表現得更為可靠。
為什么選擇 SQL Server 2017?
-
兼容性更好:相比 SQL Server 2022,2017 版本的 Docker 鏡像在很多情況下提供了更高的穩定性,尤其是在使用一些第三方數據庫客戶端時,連接問題較少發生。
-
穩定性:SQL Server 2017 在 Docker 環境中的表現相對更加成熟,很多開發者和生產環境中的用戶更愿意使用這個版本。
-
廣泛的支持:2017 版本的 SQL Server 在各大社區和技術支持中得到了更廣泛的驗證和使用,遇到問題時解決方案更多。
結語
雖然 SQL Server 2022 作為最新版有其獨特的功能和性能提升,但在 Docker 環境下,特別是使用 Navicat 等數據庫管理工具時,可能會遇到一些兼容性問題。如果你正在面臨這種問題,強烈建議使用 SQL Server 2017 版本,暫時避開這個坑。
希望這篇博客能幫助你順利解決 Docker 上 SQL Server 的安裝和連接問題,避免一些不必要的麻煩。如果你有其他疑問或建議,歡迎留言討論!
備注:在生產環境中,請確保更改密碼 <password>
為更強的密碼,并做好相應的安全配置。
參考文章1: 如何安裝2017
參考文章2:如何顯示庫表