簡體   English   中英

無法連接到在 docker 中運行的 MySQL

[英]Can't connect to MySQL running in docker

我正在嘗試使用一些舊的 LAMP 開發堆棧構建 docker 映像以用於開發目的。 基本上我正在使用 ubuntu 映像並安裝 bitnami LAMP 堆棧。 這是我到目前為止的 Dockerfile:

FROM ubuntu

EXPOSE 80 443 3306

WORKDIR /opt

COPY setup.sh .
RUN chmod +x setup.sh
RUN ./setup.sh      # this bash script downloads and runs installer

CMD /opt/bitnami/ctlscript.sh start && tail -f /opt/bitnami/apache2/logs/access_log

然后我像這樣運行那個容器:

docker run --name dev -d -p 8080:80 -p 3307:3306 -v "C:\\dev\\project:/opt/bitnami/apache2/htdocs" aburov/lamp5.6

一切都按預期工作(來自c:\\dev\\project應用程序可以通過localhost:8080訪問並且它可以訪問數據庫),除了我無法使用映射的 3307 端口從主機連接到 MySQL 的事實。

我試過從 MySQL Workbench 和 JetBrains 的 DataGrip 連接都失敗了,並出現了類似的錯誤:

與主要的通信鏈路故障。 找不到主節點的活動連接。 java.io.EOFException:流意外結束,從 4 讀取 0 個字節(套接字已被服務器關閉)。

我試過了:

  1. 假設存在一些沖突,使用映射到另一台主機的端口(3306、3308、10123);
  2. 使用不同的 MySQL 驅動程序。

MySQL 版本是 5.6。

我缺少什么? 先感謝您!

在檢查端口映射是否正確並驗證本地 mysqlclient 可以連接到服務器后,還有另一種可能性。

MySQL 處於默認配置作為安全措施,只接受來自本地主機的訪問。

所以你必須控制和更改my.cnf的以下參數

[mysqld] 
bind-address=0.0.0.0

這將允許從每個ip 訪問

此外,默認情況下root僅具有localhost權限,因此不允許從其他主機與該用戶連接。 為了解決這個問題,我們可以從容器內執行以下 SQL 命令:

GRANT CREATE USER ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;

另一種選擇是創建單獨的用戶(通過從容器內運行相應的 SQL)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM