我正在尝试设置一个用于开发的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
和sub IP docker给它0.0.0.0:3306
在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或任何其他客户端测试您的连接,它应该工作。
正如您在官方图像文档中看到的那样:
MYSQL_ROOT_HOST:默认情况下,MySQL会创建“root”@“localhost”帐户。此帐户只能从容器内部连接,需要使用docker exec命令,如MySQL命令行客户端连接MySQL中所述。要允许来自其他主机的连接,请设置此环境变量。例如,值“172.17.0.1”(默认的Docker网关IP)将允许来自Docker主机的连接。
因此,您必须使用您可以在错误消息中看到的地址MYSQL_ROOT_HOST
设置172.18.0.1
变量。