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
我在 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