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

Posted

技术标签:

【中文标题】我无法使用 DataGrip 数据库客户端从本地主机连接到 docker 中的 mysql【英文标题】:I can't connect to mysql in docker from my localhost with DataGrip database client 【发布时间】:2020-05-31 16:24:12 【问题描述】:

我有以下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。

怎么了?

【问题讨论】:

【参考方案1】:

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

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/

【讨论】:

以上是关于我无法使用 DataGrip 数据库客户端从本地主机连接到 docker 中的 mysql的主要内容,如果未能解决你的问题,请参考以下文章

使用 Datagrip 从 CSV 文件导入 VARRAY

如何使用 DataGrip 在本地创建 postgreSQL 数据库

如何使用 DataGrip 连接到 MAMP MySQL 服务器

如何设置 DataGrip 通过使用 DataGrip 的隧道以 SSL 模式连接 Cloud SQL

如何从 DataGrip 导出/导入数据源?

无法使用 Datagrip 提交对表的更改