簡體   English   中英

無法在 osx 上的 docker 內連接到 mysql

[英]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.

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