我正在尝试从docker映像连接到mysql数据库。但是它会抛出错误。
下面是我使用的docker图像。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 inspect检查ip并ping该ip,则表明ip不可访问。
docker inspect 9f35d2e39476 | grep -i ipaddress
如果我试着用 localhost
以及 127.0.0.1
我有以下错误。
无法加载身份验证插件“caching\u sha2\u password”。
7条答案
按热度按时间bvjveswy1#
如果你想使用MySQL8.0而没有出现“caching\u sha2\u password plugin”错误,那么请查看我写的关于如何在docker中使用持久数据设置MySQL8.0的几篇博文,以及关于如何使用MySQL8.0原生密码运行MySQL8.0容器的博文。
简而言之,您可以创建本地“my.cnf”配置文件:
向其中添加必要的config语句:
然后将该文件作为卷绑定包含在“docker run”语句中:
您可以在此处阅读有关这些步骤的更多详细信息:
https://medium.com/@crmcmullen/how-to-run-mysql-in-a-docker-container-on-macos-with-persistent-local-data-58b89aec496a
https://medium.com/@crmcmullen/how-to-run-mysql-8-0-with-native-password-authentication-502de5bac661
6mw9ycah2#
首先,请注意,您使用的是非稳定软件,因此在版本和意外行为之间可能会有重大变化。
编辑:不再开发,稳定版于2018年4月19日发布
第二,你不能直接ping你的容器,它在另一个网上,但你可以很容易地使用另一个容器ping他。
mysql 8使用
caching_sha2_password
作为默认的身份验证插件而不是mysql_native_password
. 更多信息请点击此处。许多mysql驱动程序还没有添加对
caching_sha2_password
但是。如果遇到问题,可以使用以下方法更改为旧的身份验证插件:
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8 mysqld --default-authentication-plugin=mysql_native_password
lhcgjxsq3#
我也遇到了同样的问题,但对于运行mysql 8.x的docker容器来说,这并不能解决这个问题。我在集装箱里登记了
然后以root用户身份登录mysql
输入root的密码(默认为“root”)最后运行:
你都准备好了。
这里已经回答了这个问题:post
xu3bshqb4#
如果您试图使用终端本身连接到mysql,那么您可能有一个错误的构建。但是,如果您试图使用gui客户机(例如sequel pro)连接到mysql,它可能不支持mysql 8的新auth特性。
作为解决方法,您可以从
--default-authentication-plugin=mysql_native_password
命令,默认mysql使用旧的身份验证:docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8 --default-authentication-plugin=mysql_native_password
tjjdgumg5#
从docker compose启动时,我在这里找到了一个补丁:
也就是说,在启动mysql时从新的mysql password/auth机制恢复。
xzlaal3s6#
这可能被认为已经解决了,但我想记录下我克服这一点所花的时间。我也遇到了类似的问题,恢复到旧的密码标准并不是一个解决方案。我需要使用caching\u sha2\u密码,因此上面的任何一项都不适用于我,我必须使用以下命令:
docker run -it --rm mysql mysql -h 172.31.116.20 -p -P6603
其中172.31.116.20是运行容器的本地ip地址,-p6603是运行容器的端口。我在docker站点上为mysql容器找到了以下解决方案:https://hub.docker.com/_/mysql/
它位于“从mysql命令行客户端连接到mysql”部分。
du7egjpx7#
psychemedia的回答几乎对我有用(Win10上的新安装)。还有一件非常重要的事我必须做,因为这不是我第一次尝试。如果您有附加数据文件夹,在我之前的示例mysql卷中,清空/删除此文件夹的内容。我的工作docker撰写文件:
更新docker compose文件中的环境变量。
为mysql数据创建文件夹(卷):mkdir mysql
检查语法:docker-compose.exe config
编译:docker-compose.exe编译
运行它:docker-compose.exe up