[英]Can't connect to mysql inside docker on osx
最近,我的 docker 容器拒絕連接。 它過去運行良好,這個問題是新問題,到目前為止還沒有解釋。
停止和重新啟動容器沒有任何效果。
停止並重新啟動 Docker for Desktop for Mac 無效。
我只能通過重新啟動我的 OSX 筆記本電腦來解決它。 (macOS Mojave v 10.14.5) 然后它會工作一段時間,然后它再次開始阻止連接嘗試
我可以執行到容器中,例如
docker exec -it db /bin/bash
從容器內我可以訪問 mysql 沒問題。
我試過在 mysql 中啟用一般登錄來嘗試調試它:它顯示沒有活動......
我的筆記本電腦有足夠的可用磁盤空間(188GB 可用空間)
在過去的 6 個月里,所有這些都運行良好,但在上周左右短暫工作后,突然開始阻止連接......
感謝您提供任何線索或想法
這是我的 Dockerfile
FROM mysql:5.7
RUN DEBIAN_FRONTEND=noninteractive apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y apt-utils
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y procps
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y debianutils
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y iputils-ping
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y net-tools
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y vim
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y less
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y man
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y sudo
WORKDIR .
COPY ./my.cnf /etc/mysql/my.cnf
#CMD ["mysqld", "--general_log=1", "--log-raw", "--log-error"]
CMD ["mysqld"]
我的 docker-compose 文件:
(MYSQL_DATA_FOLDER 是設置為有效路徑的環境變量
version: '3.5'
services:
database:
image: database
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: ""
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
volumes:
- mydatavolume:${MYSQL_DATA_FOLDER}
build:
context: .
volumes:
mydatavolume:
networks:
default:
name: dev_network
driver: bridge
我如何啟動它:
docker-compose build;
docker-compose run --service-ports --volume=$MYSQL_DATA_FOLDER:/var/lib/mysql --name db --rm database
我通常如何連接(通過 osx 終端中的 mysql 客戶端)
mysql -h localhost -P 3306 --protocol=tcp -u root
我還嘗試了使用 127.0.0.1 以及 docker inspect 顯示的 IP 地址的變體
我的.cnf
[mysqld]
sql_mode = ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
嘗試添加:
bind-address=0.0.0.0
以上...沒有幫助
用戶表
mysql> SELECT host, user FROM mysql.user;
+-----------+---------------+
| host | user |
+-----------+---------------+
| % | root |
| % | some_user |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+---------------+
5 rows in set (0.01 sec)
新訊息:
我已經刪除了數據卷並讓它創建了一個新的數據卷。 現在問題消失了 - 所以,它似乎是一個 MySQL 問題而不是一個 Docker 問題。 我仍然想知道如何在發生這種 MySQL 問題時進行調試。
可能存在阻止來自root用戶的連接的安全限制。 您可以嘗試創建一個具有必要權限的本地用戶,如下所示。
mysql> CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
重新啟動容器並嘗試使用本地用戶進行連接。
mysql -h 127.0.0.1 -u some_user --protocol=TCP -P 3306 -p
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.