mysql docker 在 mac os "crash" 在 caching_sha2 当 laravel 连接时

mysql docker on mac os "crash" on caching_sha2 when laravel connect

我在 Mac Mini 上恢复了出厂设置,我只想安装 Docker 和一些基本工具,例如 git 直接安装在 OS X 上,但其他的我想使用的软件 docker - 我所说的其他软件是指 php、phpstorm、nginx、node、mysql、postgres、phpmyadmin、mysql-workbench... 在许多版本中。我想使用 docker 安装它们以便轻松管理它们。对于这个工具中的每一个,我都想用例如映射文件夹。我的项目代码或数据库存储、配置等...

在设置过程中 mysql 8 我遇到了一个奇怪的问题 - 我能够通过 phpmyadmin 和 mysql-workbench 以 root 身份登录数据库,但是我的 php 7 laravel 应用程序在连接期间“挂起”。这是 mysql docker 文件:

version: '3.1'

services:

  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: terefere321
      MYSQL_ROOT_HOST: "%"
    ports:
      - 3306:3306
    volumes:
    - ./db_files:/var/lib/mysql

这是 docker 文件 + 脚本,它允许我在 docker 上通过 cmd 运行 php:

FROM php:7.2-apache

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

RUN apt-get update &&\
    apt-get install -y \
    git \
    zlib1g-dev \
    zip \
    unzip \
    &&\ 
    docker-php-ext-install pdo pdo_mysql zip &&\
    a2enmod rewrite 

Bash 脚本到 运行 php-cmd docker 容器并“登录”到它以获取命令行:

set -e
cd -- "$(dirname "[=19=]")"  # go to script dir - (for macos double clik run)
docker build -t php-cmd .
docker rm -f php-cmd
docker run -d --name php-cmd -v /Volumes/work:/var/www/html php-cmd
docker exec -it php-cmd /bin/bash

这里/Volumes/work是我项目代码的目录。 “登录”后我 运行 php artisan migrate 和应用程序挂起 30 秒并在抛出错误后:

SQLSTATE[HY000] [2006] MySQL server has gone away PDO::__construct():

Unexpected server respose while doing caching_sha2 auth : 109

default-authentication-plugin=mysql_native_password 命令添加到 mysql8 dockerfile - 所以你应该得到:

version: '3.1'

services:

  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: terefere321
      MYSQL_ROOT_HOST: "%"
    ports:
      - 3306:3306
    volumes:
    - ./db_files:/var/lib/mysql