无法从本地主机连接到 mysql 容器

Gio*_*ane 6 mysql docker docker-compose

我正在尝试设置一个用于开发的 MySQL 容器。

所以我曾经docker-compose设置它。

容器和 mysql 看起来不错。问题是我想从 DBeaver 客户端连接到它,但我找不到我是如何做到的。

这是我的docker-compose.yml

version: '2'
services:
  db:
    image: 'mysql:5.7'
    volumes:
       - '~/dev/dbs-data/mysql:/var/lib/mysql'
    restart: 'always'
    expose: 
      - '3306'
    ports:
      - '3306:3306'
    environment:
       MYSQL_ROOT_PASSWORD: 'pass'
       MYSQL_DATABASE: 'db'
       MYSQL_USER: 'user'
       MYSQL_PASSWORD: 'pass'
Run Code Online (Sandbox Code Playgroud)

当我尝试连接它时,DBeaver我得到:

java.sql.SQLException: null,  message from server: 
"Host '172.18.0.1' is not allowed to connect to this MySQL server"
Run Code Online (Sandbox Code Playgroud)

更新

我不是要尝试使用 IP 进行连接172.18.0.1。我尝试使用连接localhost:3306127.0.0.1:3306并使用子 IP docker 给了它0.0.0.0:3306

更新

在 Mac 上成功连接后,我在 Linux 上再次尝试使用 DBeaver,然后再次尝试: 在此处输入图片说明

尝试与其他工具 mysql 工作台连接: 在此处输入图片说明

小智 11

正如您在官方图片文档中看到的:

MYSQL_ROOT_HOST :默认情况下,MySQL 创建“root”@“localhost”帐户。该帐户只能从容器内部连接,需要使用 docker exec 命令,如从 MySQL 命令行客户端连接到 MySQL 中所述。要允许来自其他主机的连接,请设置此环境变量。例如,值“172.17.0.1”是默认的 Docker 网关 IP,将允许来自 Docker 主机的连接。

因此,您必须使用错误消息中看到的MYSQL_ROOT_HOST地址来设置变量。172.18.0.1

  • 谢谢!这应该被接受为这个问题的正确答案。 (2认同)

vmo*_*usu 5

在 Docker 上,运行这个命令来创建一个 MySql 容器,它将把端口暴露给 docker 的外部世界。

docker run --name <mysql-container-name> -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<root-password> -e MYSQL_USER=root -e MYSQL_PASSWORD=<user-password> -d mysql:latest

需要注意的几点:尝试与 DBeaver 连接时,您可能会看到以下错误:

Public Key Retrieval is not allowed

解决方法:在DBeaver上新建连接的时候,去Driver Properties寻找allowPublicKeyRetrievel并设置为TRUE. 此外,如果需要,设置useSSLFALSE.

从 DBeaver 或任何其他客户端测试您的连接,它应该可以正常工作。