peewee 连接 docker-mysql 失败
peewee 连接 docker-mysql 失败
我正在尝试从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不可达。如果我尝试使用localhost
和127.0.0.1
连接,我会收到以下错误:
无法加载身份验证插件'caching_sha2_password'。
使用非稳定的软件时,请注意可能存在版本之间的重大更改和意外行为。
首先,请注意,该软件已不再开发,稳定版本于2018年4月19日发布。
其次,您无法直接ping通您的容器,因为它在另一个网络中,但您可以轻松地使用另一个容器来ping通它。
mysql 8默认使用
许多mysql驱动程序尚未添加对
如果您遇到问题,可以使用类似以下内容的命令将其更改为旧的身份验证插件:
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8 mysqld --default-authentication-plugin=mysql_native_password
感谢,我将版本更改为5,问题得到解决。
--default-authentication-plugin参数对我帮助很大,因为我默认安装了sha 256,并尝试稍后更改,导致我通过mysqlshel无法访问容器。谢谢。
问题出现的原因:当使用docker-compose启动时,MySQL密码/认证机制更新导致连接失败。
解决方法:在启动MySQL时,恢复到旧的MySQL密码/认证机制。
具体的解决方法如下:
1. 在docker-compose文件中找到“services”部分。
2. 在“services”中找到“db”服务,并添加以下内容:
services:
db:
image: mysql
command: mysqld --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
3. 保存文件并重新启动docker-compose。
这个解决方法适用于docker环境中使用peewee连接MySQL时出现连接失败的情况。
在使用Docker容器运行mysql 8.X时,我遇到了相同的问题。我首先登录到容器中,然后以root身份登录到mysql。最后,运行ALTER USER命令来更改用户的身份验证方式。这样做后,问题得以解决。
然而,每次容器重新启动时,我都需要重新执行这些步骤。我想知道是否有办法使这些更改永久生效。有人建议可以编写一个在容器启动或重新启动时运行的脚本来实现这一点。
非常感谢这位朋友的建议,这对我非常有效。在mac环境下,这个方法适用。
总结起来,问题的原因是因为使用Docker容器运行mysql 8.X时,身份验证方式可能会出现问题。解决方法是通过在容器中执行ALTER USER命令来更改用户的身份验证方式。如果希望更改永久生效,可以编写一个在容器启动或重新启动时运行的脚本。
希望这篇文章能帮助到遇到类似问题的人们。