无法从本地连接到mysql docker

Gau*_*hah 15 mysql docker

我试图从docker镜像连接到mysql数据库.然而,它正在抛出错误.

以下是我正在使用的泊坞窗图片. https://hub.docker.com/_/mysql/

以下是我用来运行docker镜像的命令.

docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8
Run Code Online (Sandbox Code Playgroud)

以下是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
Run Code Online (Sandbox Code Playgroud)

如果我使用docker检查IP并检查该IP,则表明IP无法访问.

docker inspect 9f35d2e39476 | grep -i ipaddress
Run Code Online (Sandbox Code Playgroud)

如果我尝试连接使用localhost,127.0.0.1我得到以下错误.

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

axe*_*ira 27

我遇到了同样的问题,但是对于我来说,运行mysql 8.X的Docker容器并没有这样做.我把它塞进了容器里

docker exec -it CONTAINER_ID bash
Run Code Online (Sandbox Code Playgroud)

然后以root身份登录mysql

mysql --user=root --password
Run Code Online (Sandbox Code Playgroud)

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

ALTER USER 'username' IDENTIFIED WITH mysql_native_password BY 'password';
Run Code Online (Sandbox Code Playgroud)

你们都准备好了.

这已在这里得到解答:帖子

  • axelferreira =当天的英雄!谢谢 (2认同)
  • 每次重新启动容器时我都必须重新执行此操作。如何配置它使其永久有效? (2认同)

Iva*_*dad 25

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

其次,你不能直接ping你的容器,它在其他网络中,但你可以轻松地使用另一个容器来ping他.

Mysql 8使用caching_sha2_password作为默认的身份验证插件而不是mysql_native_password.更多信息在这里.

如果您遇到问题,可以使用以下内容更改为旧的身份验证插件:

__PRE__


psy*_*dia 20

我找到了解决这里的码头工人,撰写生火时:

services:

  db:
    image: mysql
    command: mysqld --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
Run Code Online (Sandbox Code Playgroud)

也就是说,在启动MySQL时从新的MySQL密码/ auth机制恢复.


Mat*_*ejC 7

来自 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"
Run Code Online (Sandbox Code Playgroud)
  • 更新 docker-compose 文件中的环境变量。
  • 为 mysql 数据(卷)创建文件夹:mkdir mysql
  • 检查语法:docker-compose.exe config
  • 构建它:docker-compose.exe 构建
  • 运行它:docker-compose.exe up

  • 先生,您是救星!事实上,命令“command: --default-authentication-plugin=mysql_native_password”与删除数据库的内容一样重要,如果您有我所做的附加数据文件夹,实际上只需删除所有内容,以便它可以正确地重新创建数据库改为 mysql_native_password 设置。这也修复了这个问题,以便 Sequel Pro 可以在 Mac 上运行! (2认同)

Roh*_*han 6

如果您尝试使用终端本身连接到 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