我正在尝试从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 inspect检查IP并ping该IP,则表明IP无法访问。
docker inspect 9f35d2e39476 | grep -i ipaddress
如果我尝试使用localhost
和127.0.0.1
进行连接,我会收到以下错误消息。
无法加载身份验证插件'caching_sha2_password'。
答案 0 :(得分:22)
我遇到了同样的问题,但是对于使用运行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
答案 1 :(得分:16)
首先,请注意您使用的是非稳定版软件,因此版本与意外行为之间可能会发生重大变化。
其次,您不能直接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
答案 2 :(得分:15)
我从docker-compose:
启动时找到了修复hereservices:
db:
image: mysql
command: mysqld --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
也就是说,在启动MySQL时从新的MySQL密码/ auth机制恢复。
答案 3 :(得分:2)
如果您尝试使用终端本身连接到MySQL,则可能会遇到问题。但是,如果您尝试使用GUI客户端(例如Sequel Pro)连接到MySQL,则它可能不支持MySQL 8的新身份验证功能。
作为一种解决方法,您在末尾使用--default-authentication-plugin=mysql_native_password
命令启动docker容器,它将默认使用默认的MySQL认证:
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8 --default-authentication-plugin=mysql_native_password
答案 4 :(得分:2)
psychemedia的答案几乎对我有用(在Win 10上全新安装)。我还必须做一件非常重要的事情,因为这不是我的第一次尝试。如果您已附加数据文件夹,则在我的示例mysql卷之前,清空/删除此文件夹的内容。我正在工作的docker-compose文件:
version: '3' services:
mysql-development:
image: mysql:8.0.19
container_name: mysql
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: XXX
MYSQL_DATABASE: YYY
MYSQL_USER: ZZZ
MYSQL_PASSWORD: WWW
ports:
- "3306:3306"
- "33060:33060"
working_dir: /var/lib/mysql
volumes:
- "./mysql:/var/lib/mysql:rw"
答案 5 :(得分:0)
这可能被认为已解决,但是我想记录一下克服该问题所花费的时间。我遇到了类似的问题,并且无法恢复到旧的密码标准。我需要使用caching_sha2_password,因此以上内容都不适合我,我不得不使用以下命令:
docker run -it --rm mysql mysql -h 172.31.116.20 -p -P6603
172.11.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”部分中。
答案 6 :(得分:0)
上面的信息很好,但这里有一个额外的想法,可能会对某些人有所帮助。 root
帐户默认无法远程连接。要启用它,您必须包含主机权限。在版本 8(我使用的是 8.0.25)中,这可以通过设置 MYSQL_ROOT_HOST
来完成。 3.8 docker-compose.yml
的相关部分对我来说是这样的:
mysqldb:
image: $REPONAME/mysql:$MYSQLDB_VERSION
build:
context: ./docker/mysqldb
args:
MYSQLDB_VERSION: $MYSQLDB_VERSION
environment:
MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: dbname
MYSQL_USER: dbuser
MYSQL_PASSWORD: dbpass
command: [mysqld, --default-authentication-plugin=mysql_native_password, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --innodb_monitor_enable=all, --max-connections=1001]
ports:
- 3306:3306
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 10s
retries: 10
答案 7 :(得分:-2)
如果您想使用MySQL 8.0而不收到“ caching_sha2_password插件”错误,请查看我写的一些博客文章,内容涉及如何在Docker中使用持久性数据设置MySQL 8.0,以及如何运行带有mysql_native_password的MySQL 8.0容器。
简而言之,您可以创建本地“ 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