我试图从docker镜像连接到mysql数据库。然而,它正在抛出错误。
以下是我正在使用的泊坞窗图片。 https://hub.docker.com/_/mysql/
以下是我用来运行docker镜像的命令。
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8
以下是docker ps
命令的输出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f35d2e39476 mysql:8 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:3306->3306/tcp
如果我使用docker检查IP并检查该IP,则表明IP无法访问。
docker inspect 9f35d2e39476 | grep -i ipaddress
如果我尝试使用localhost
和127.0.0.1
连接,我会收到以下错误。
无法加载身份验证插件'caching_sha2_password'。
我遇到了同样的问题,但是对于我来说,运行mysql 8.X的Docker容器并没有这样做。我把它塞进了容器里
docker exec -it CONTAINER_ID bash
然后以root身份登录mysql
mysql --user=root --password
输入root的密码(默认为'root')最后运行:
ALTER USER 'username' IDENTIFIED WITH mysql_native_password BY 'password';
你们都准备好了。
这已经在这里得到了回答:post
首先,请注意您使用的是非稳定的软件,因此版本和意外行为之间可能会发生重大变化。
其次,你不能直接ping你的容器,它在其他网络中,但你可以轻松地使用另一个容器来ping他。
Mysql 8使用caching_sha2_password作为默认的身份验证插件而不是mysql_native_password。 More info here。
如果您遇到问题,可以使用以下内容更改为旧的身份验证插件:
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8 mysqld --default-authentication-plugin=mysql_native_password
我发现从docker-compose启动时修复here:
services:
db:
image: mysql
command: mysqld --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
也就是说,在启动MySQL时从新的MySQL密码/ auth机制恢复。
这可能被认为已经解决了,但我想记录一下克服这个问题所需的内容。我遇到了类似的问题,并且恢复旧密码标准不是解决方案。我需要使用caching_sha2_password,所以以上都没有为我工作,我不得不使用这个命令:
docker run -it --rm mysql mysql -h 172.31.116.20 -p -P6603
其中172.31.116.20是运行容器的本地IP地址,-P6603是运行它的端口。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5092251b3dbf mysql "docker-entrypoint..." 16 minutes ago Up 16 minutes 33060/tcp, 0.0.0.0:6603->3306/tcp test1-mysql
我在Docker站点上找到了MySQL容器的解决方案:https://hub.docker.com/_/mysql/
它位于“从MySQL命令行客户端连接到MySQL”部分。
如果你想使用MySQL 8.0并且没有得到“caching_sha2_password插件”错误,那么请查看我写的关于如何使用持久数据在Docker中设置MySQL 8.0的几篇博客文章,以及关于如何运行MySQL 8.0的帖子容器与mysql_native_password。
简而言之,您可以创建本地“my.cnf”配置文件:
$ sudo nano /usr/local/opt/mysql/config/my.cnf`
添加必要的配置语句:
[mysqld]
default-authentication-plugin=mysql_native_password
然后在“docker run”语句中将该文件包含为卷绑定:
$ docker run --restart always --name mysql8.0 -
v/usr/local/opt/mysql/8.0:/var/lib/mysql -v
/usr/local/opt/mysql/config:/etc/mysql/conf.d -p 3306:3306 -d -e
MYSQL_ROOT_PASSWORD=your_password mysql:8.0
您可以在此处阅读有关这些步骤的更多详情:
https://medium.com/@crmcmullen/how-to-run-mysql-8-0-with-native-password-authentication-502de5bac661