[英]Can’t connect to mysql docker image
我在使用 mysql/mysql-server docker 圖像時遇到問題。 我想連接到 mysql 服務器,創建數據庫,具有所有權限的用戶能夠創建新模式並在將來運行 liquibase。
我這樣運行容器:
sudo docker run --name db -e MYSQL_ROOT_PASSWORD=qwe123 -e MYSQL_DATABASE=test \
-d -p 3306:3306 mysql/mysql-server:5.6 --lower-case-table-names=1
當我執行docker ps
時,我看到它正在運行,但是當我嘗試運行 liquibase(使用 root/qwe123)時,它失敗了:
[錯誤] 無法在項目數據庫上執行目標 org.codehaus.mojo:sql-maven-plugin:1.5:execute (default-cli):null,來自服務器的消息:“主機‘172.17.0.1’不允許連接到這個MySQL服務器" -> [求助1]
嘗試與用戶:
sudo docker run --name db -e MYSQL_ROOT_PASSWORD=qwe123 -e MYSQL_DATABASE=test \
-e MYSQL_USER=admin -e MYSQL_PASSWORD=qwe123 -d -p 3306:3306 \
mysql/mysql-server:5.6 --lower_case_table_names=1
管理員用戶在創建新模式時出錯,看起來管理員只能訪問測試數據庫:
[錯誤] 無法在項目數據庫上執行目標 org.codehaus.mojo:sql-maven-plugin:1.5:execute (default-cli):拒絕用戶 'admin'@'%' 訪問數據庫 'test2' -> [幫助1]
使用 root 時出現以下錯誤:
[錯誤] 最后一個成功發送到服務器的數據包是 0 毫秒前。 驅動程序尚未從服務器收到任何數據包。 無法從服務器讀取響應。 預期讀取 4 個字節,在連接意外丟失之前讀取 0 個字節。
還嘗試在 init 命令中為管理員設置權限:
docker run --name db -e MYSQL_ROOT_PASSWORD=qwe123 -e MYSQL_DATABASE=test -d \
-p 3306:3306 mysql/mysql-server:5.6 --lower_case_table_names=1 \
'--init-connect=CREATE USER `admin`@`localhost` IDENTIFIED BY "qwe123"; GRANT ALL PRIVILEGES ON *.* TO `admin`@`localhost` WITH GRANT OPTION; CREATE USER `admin`@`%` IDENTIFIED BY "qwe123";GRANT ALL PRIVILEGES ON *.* TO `admin`@`%` WITH GRANT OPTION;FLUSH PRIVILEGES;'
在這種情況下,root 用戶有錯誤:
[錯誤] 無法在項目數據庫上執行目標 org.codehaus.mojo:sql-maven-plugin:1.5:execute (default-cli):null,來自服務器的消息:“主機‘172.17.0.1’不允許連接到這個MySQL服務器" -> [求助1]
對於管理員 - 以下內容:
12:13:57 [錯誤] 成功發送到服務器的最后一個數據包是 0 毫秒前。 驅動程序尚未從服務器收到任何數據包。 無法從服務器讀取響應。 預期讀取 4 個字節,在連接意外丟失之前讀取 0 個字節。
還嘗試使用 localhost 和 127.0.0.1 作為 DB 的主機,連接總是出錯。 有任何想法嗎?
您應該允許MySQL中的用戶從主機的IP連接。 在MySQL中更改用戶后不要忘記刷新權限
GRANT CREATE USER ON *.* TO 'root'@'%';
並重新啟動mysql實例
還有機會通過my.cnf將mysql綁定到127.0.0.1。 如果是這樣 - 將綁定更改為0.0.0.0以通過任何IP訪問它
按照以下步驟與您的外部客戶端(即 dbeaver、mysql 工作台等)一起使用 docker 容器
打開你的終端即 bash | zsh | cmd
注意:: mysql/mysql-server 是我的 mysql 的圖像...你的可能不同否則如果不存在它會拉新圖像
docker run -d -p 3306:3306 --name mysql-test -e MYSQL_ROOT_PASSWORD=1234 mysql/mysql-server
下面依次打開你的終端運行運行cli
mysql-test 為容器名稱;
docker exec -it $(docker ps -q -f name='mysql-test') bash -l;
mysql -uroot -1234;
cli 在終端中看起來像這樣“mysql >....”
注意:在您的終端上運行的以下命令中使用您自己的用戶更改用戶名和密碼
SE mysql;
CREATE USER 'new_usernmame'@'localhost' IDENTIFIED BY 'new_password';
GRANT ALL ON *.* TO 'new_usernmame'@'localhost';
FLUSH PRIVILEGES;
恭喜,您現在可以與新創建的用戶建立 jdbc 連接
參見https://mohsin-ejaz.gitbook.io/docker-notes/docker-mysql/dockerize-02
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.