[英]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 個字節(套接字已被服務器關閉)。
我試過了:
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.