无法从本地连接到mysql docker

y4ekin9u  于 2021-06-20  发布在  Mysql
关注(0)|答案(7)|浏览(440)

我正在尝试从docker映像连接到mysql数据库。但是它会抛出错误。
下面是我使用的docker图像。https://hub.docker.com/_/mysql/
下面是我用来运行docker映像的命令。

  1. docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8

以下是 docker ps 命令

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 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不可访问。

  1. docker inspect 9f35d2e39476 | grep -i ipaddress

如果我试着用 localhost 以及 127.0.0.1 我有以下错误。
无法加载身份验证插件“caching\u sha2\u password”。

bvjveswy

bvjveswy1#

如果你想使用MySQL8.0而没有出现“caching\u sha2\u password plugin”错误,那么请查看我写的关于如何在docker中使用持久数据设置MySQL8.0的几篇博文,以及关于如何使用MySQL8.0原生密码运行MySQL8.0容器的博文。
简而言之,您可以创建本地“my.cnf”配置文件:

  1. $ sudo nano /usr/local/opt/mysql/config/my.cnf`

向其中添加必要的config语句:

  1. [mysqld]
  2. default-authentication-plugin=mysql_native_password

然后将该文件作为卷绑定包含在“docker run”语句中:

  1. $ docker run --restart always --name mysql8.0 -
  2. v/usr/local/opt/mysql/8.0:/var/lib/mysql -v
  3. /usr/local/opt/mysql/config:/etc/mysql/conf.d -p 3306:3306 -d -e
  4. 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

展开查看全部
6mw9ycah

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

lhcgjxsq

lhcgjxsq3#

我也遇到了同样的问题,但对于运行mysql 8.x的docker容器来说,这并不能解决这个问题。我在集装箱里登记了

  1. docker exec -it CONTAINER_ID bash

然后以root用户身份登录mysql

  1. mysql --user=root --password

输入root的密码(默认为“root”)最后运行:

  1. ALTER USER 'username' IDENTIFIED WITH mysql_native_password BY 'password';

你都准备好了。
这里已经回答了这个问题:post

xu3bshqb

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

tjjdgumg

tjjdgumg5#

从docker compose启动时,我在这里找到了一个补丁:

  1. services:
  2. db:
  3. image: mysql
  4. command: mysqld --default-authentication-plugin=mysql_native_password
  5. restart: always
  6. environment:
  7. MYSQL_ROOT_PASSWORD: example

也就是说,在启动mysql时从新的mysql password/auth机制恢复。

xzlaal3s

xzlaal3s6#

这可能被认为已经解决了,但我想记录下我克服这一点所花的时间。我也遇到了类似的问题,恢复到旧的密码标准并不是一个解决方案。我需要使用caching\u sha2\u密码,因此上面的任何一项都不适用于我,我必须使用以下命令: docker run -it --rm mysql mysql -h 172.31.116.20 -p -P6603 其中172.31.116.20是运行容器的本地ip地址,-p6603是运行容器的端口。

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 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”部分。

du7egjpx

du7egjpx7#

psychemedia的回答几乎对我有用(Win10上的新安装)。还有一件非常重要的事我必须做,因为这不是我第一次尝试。如果您有附加数据文件夹,在我之前的示例mysql卷中,清空/删除此文件夹的内容。我的工作docker撰写文件:

  1. version: '3' services:
  2. mysql-development:
  3. image: mysql:8.0.19
  4. container_name: mysql
  5. command: --default-authentication-plugin=mysql_native_password
  6. environment:
  7. MYSQL_ROOT_PASSWORD: XXX
  8. MYSQL_DATABASE: YYY
  9. MYSQL_USER: ZZZ
  10. MYSQL_PASSWORD: WWW
  11. ports:
  12. - "3306:3306"
  13. - "33060:33060"
  14. working_dir: /var/lib/mysql
  15. volumes:
  16. - "./mysql:/var/lib/mysql:rw"

更新docker compose文件中的环境变量。
为mysql数据创建文件夹(卷):mkdir mysql
检查语法:docker-compose.exe config
编译:docker-compose.exe编译
运行它:docker-compose.exe up

展开查看全部

相关问题