为什么MariaDB docker容器不需要来自主机的密码,而是需要来自容器内部的密码



使用docker compose文件生成的MariaDB Container(10.9最新图像(出现了一个非常奇怪的情况。

容器全部工作,如果我访问容器的shell,我可以运行mysql-uroot-p并使用我的密码访问mysql。

我把端口3306插到我的M2 Mac上;根@'localhost'的访问被拒绝"当尝试mysql-h127.0.0.1-u根-p和相同的密码时。

但是,如果我将密码字段留空,它就会连接。我不知道为什么!我想可能是root@'%'有一个空白密码,但我已经尝试将其设置为相同的密码。但不管怎样,我都希望访问被拒绝的消息说我正在使用root@'%'

我已尝试重建映像,删除卷。我发现一个关于MYSQL_PWD的github问题是空白的,所以我添加了这个问题,但它仍然不能很好地发挥作用。

db: 
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: dev_db
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_PWD: password
ports:
- "3306:3306"
volumes:
- data-volume:/var/lib/mysql

以前有人遇到过这种情况吗,或者有什么建议如何解决?这就像根@'localhost'以某种方式配置了两个不同的凭据?

当您在容器内连接到mysql/mariadb时,该实例不会认为您来自"localhost"。请参阅下面的测试方法。所以,如果您看到一个错误,说"root"@"localhost",那肯定是因为您连接到的是在主机上运行的进程,而不是在容器内。

运行测试容器

docker run -d --rm --name testmariadb -P 
-e MYSQL_RANDOM_ROOT_PASSWORD=true 
mariadb:latest

检查端口:

export MARIADB_PORT=$(docker inspect testmariadb --format='{{range $k, $v := .NetworkSettings.Ports}}{{with index $v 0}}{{.HostPort}}{{end}}{{end}}')
echo Container running on port ${MARIADB_PORT}

尝试连接并检查错误

mysql -h127.0.0.1 -P${MARIADB_PORT} -uroot

你应该看到类似的东西:

ERROR 1045 (28000): Access denied for user 'root'@'172.17.0.1' (using password: NO)

清理

docker container rm -f testmariadb

相关内容

最新更新