我无法使用 DataGrip 数据库客户端从本地主机连接到 docker 中的 mysql

I can't connect to mysql in docker from my localhost with DataGrip database client

我有以下 docker-compose.yml 文件:

version: '3.2'

services:

  mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=verysecret
      - MYSQL_DATABASE=yii2advanced
      - MYSQL_USER=yii2advanced
      - MYSQL_PASSWORD=secret

我通过 docker-compose up -d 运行 它。但是我无法从 SQL 客户端连接到我的数据库(我使用 JetBrains 的 DataGrip)。这是我的配置:

密码当然是secret。我已经尝试为 yii2advanced 用户检查允许的主机:

如您所见,我的 yii2advanced 允许来自任何主机的连接。我尝试更改 mysqld.cnf 并设置 bind-address = 0.0.0.0。试图将 bind-address 设置为 *。试图在我的 SQL 客户端的设置中设置 127.0.0.1 而不是 172.17.0.1。试图手动创建一个具有完全权限的新用户。没有效果。问题仍然存在。我无法从本地主机连接到容器中的 mysql。

怎么了?

默认情况下,docker-compose 创建一个桥接网络,将您的应用程序与外部隔离,包括本地主机。
您需要将隔离网络的 3306 端口暴露给本地主机。
试试这个。

version: '3.2'

services:

  mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=verysecret
      - MYSQL_DATABASE=yii2advanced
      - MYSQL_USER=yii2advanced
      - MYSQL_PASSWORD=secret
    ports:
      - 3306:3306 # <host port>:<container port>

很好读 docker 网络部分。 https://docs.docker.com/network/