我正在尝试设置一个用于开发的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"
我没有尝试使用IP 172.18.0.1
进行连接。我尝试使用localhost:3306
,127.0.0.1:3306
进行连接,并使用子IP docker将其0.0.0.0:3306
答案 0 :(得分: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
。
答案 1 :(得分:1)
在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或任何其他客户端的连接,它应该可以正常工作。
答案 2 :(得分:0)
我是docker的新手,在Linux中也遇到了同样的问题,这是地址被允许接受连接的问题;这是为我解决的问题:
/etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
docker-compose down
docker-compose up