无法从本地连接到mysql docker

问题描述 投票:8回答:5

我试图从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

如果我尝试使用localhost127.0.0.1连接,我会收到以下错误。

无法加载身份验证插件'caching_sha2_password'。

mysql docker
5个回答
19
投票

我遇到了同样的问题,但是对于我来说,运行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


15
投票

首先,请注意您使用的是非稳定的软件,因此版本和意外行为之间可能会发生重大变化。

其次,你不能直接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

14
投票

我发现从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机制恢复。


0
投票

这可能被认为已经解决了,但我想记录一下克服这个问题所需的内容。我遇到了类似的问题,并且恢复旧密码标准不是解决方案。我需要使用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”部分。


-2
投票

如果你想使用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-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

© www.soinside.com 2019 - 2024. All rights reserved.