Docker啟動Nacos報錯:No DataSource set問題及解決
問題
筆者使用 docker-compose 構(gòu)建的 Nacos 容器,每當重啟 Docker 引擎后啟動 Nacos 報錯:No DataSource set,且筆者相關(guān)的數(shù)據(jù)源配置是沒有問題的。
筆者相關(guān)環(huán)境及軟件信息如下:
- 操作系統(tǒng):Apple M1 Pro 版本 12.6.3
- Nacos:v2.2.2-slim
- MySQL:8.0.32
Caused by: com.alibaba.nacos.api.exception.NacosException: Nacos Server did not start because dumpservice bean construction failure :
No DataSource set

解決方案一(正規(guī))
容器構(gòu)建的服務中,可以使用容器名指定某個容器服務,因此可以修改為:
db.url.0=jdbc:mysql://<container_name>:<port>/mdb
其中 <container_name> 為容器名稱,而不是用具體 IP;
<port> 要使用容器內(nèi)端口號,而不是映射的宿主機端口號,如端口映射為:"3307:3306",應該填寫 3306,而不是 3307。
解決方案二
在 JDBC 驅(qū)動程序中要使用網(wǎng)卡的 IP。
如:
db.url.0=jdbc:mysql://192.168.0.120:3306/mdb
否則 Nacos 將無法找到對應的驅(qū)動鏈接。
解決方案三
在 JDBC 驅(qū)動程序中添加上參數(shù) ?
&allowPublicKeyRetrieval=true
就可以正常啟動。
db.url.0=jdbc:mysql://127.0.0.1:3306/mdb?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
原因
在 MySQL JDBC 驅(qū)動程序的 8.0.22 版本之前,如果服務器的公鑰未明確信任或者密鑰檢索失敗,連接可能會失敗。通過在連接字符串中設(shè)置"&allowPublicKeyRetrieval=true",可以指示驅(qū)動程序允許檢索公鑰,即使它未明確信任。
"&allowPublicKeyRetrieval=true"是 MySQL JDBC 驅(qū)動程序中的一個參數(shù),用于在連接字符串中允許在與 MySQL 服務器進行 SSL/TLS 加密握手期間檢索公鑰。該參數(shù)在連接到需要 SSL/TLS 加密以實現(xiàn)安全通信的 MySQL 服務器時是相關(guān)的。
然而,從 MySQL JDBC 驅(qū)動程序版本 8.0.22 開始,默認情況下"allowPublicKeyRetrieval"的值已更改為"true"。因此,在大多數(shù)情況下,您可能不需要顯式指定此參數(shù),除非使用較舊的驅(qū)動程序版本或希望在配置中明確指定。
使用 MySQL 的 SSL/TLS 加密提供了額外的安全性,通過加密在客戶端和服務器之間傳輸?shù)臄?shù)據(jù)。如果 MySQL 服務器已配置為使用 SSL/TLS,請在 JDBC 連接中啟用 SSL 以確保安全通信。

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker清理中斷構(gòu)建后產(chǎn)生的鏡像和緩存(實際操作)
Ctrl+C中斷構(gòu)建后,Docker會殘留中間層鏡像和緩存,清理方法包括刪除構(gòu)建緩存(docker build prune)、移除無標簽鏡像(docker image prune)、徹底清理(docker system prune -a)及檢查空間占用,建議根據(jù)需求選擇,避免誤刪,感興趣的朋友跟隨小編一起看看吧2025-09-09
Idea通過docker compose?發(fā)布項目的過程
這篇文章主要介紹了Idea結(jié)合docker-compose發(fā)布項目,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08

