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:3306,127.0.0.1:3306并使用子 IP docker 给了它0.0.0.0:3306
小智 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
在 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 或任何其他客户端测试您的连接,它应该可以正常工作。
| 归档时间: |
|
| 查看次数: |
14403 次 |
| 最近记录: |