无法从localhost连接到mysql容器

问题描述 投票:0回答:2

我正在尝试设置一个用于开发的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'

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

java.sql.SQLException: null,  message from server: 
"Host '172.18.0.1' is not allowed to connect to this MySQL server"

UPDATE

我不是想使用IP 172.18.0.1进行连接。我尝试连接使用localhost:3306127.0.0.1:3306和sub IP docker给它0.0.0.0:3306

UPDATE

在我的Mac上成功连接后,我再次尝试在我的Linux上使用DBeaver:enter image description here

试图连接其他工具,mysql workbench:enter image description here

mysql docker docker-compose
2个回答
2
投票

在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。此外,如果需要将useSSL设置为FALSE

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


1
投票

正如您在官方图像文档中看到的那样:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.