配置文件

将以下内容存为 stack.yml,此处为了不与本机已有的 MySQL 5.x 冲突,重新映射了端口。

需要提前建好 /www/server/mysql8/mysql 目录和 my.cnf 文件。

version: '3.1'

services:

  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: yourPassword
    ports:
      - '3307:3306'
    volumes:
      - '/www/server/mysql8/mysql:/var/lib/mysql'
      - '/www/server/mysql8/my.cnf:/etc/mysql/my.cnf'
      - '/etc/localtime:/etc/localtime:ro'

启动容器

docker-compose -f stack.yml up

配置远程访问

MySQL 安装完成后只支持 localhost 访问,我们必须设置一下才可以远程访问,另外还有一些 MySQL 8.0 连接时的一些问题。(巨坑)

查看容器列表

docker container ls

进入容器

docker exec -it yourContainerId bash

登录到 MySQL

mysql -u root -p

开始施法

use mysql;
select host, user, authentication_string, plugin from user;
# 查看表格中 root 用户的 host,默认应该显示的 localhost,只支持本地访问,不允许远程访问。

GRANT ALL ON *.* TO 'root'@'%';
# GRANT ALL ON 表示所有权限,% 表示通配所有 host,可以访问远程。
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yourPassword';

flush privileges; 
# 刷新权限

测试连接

mysql -h 127.0.0.1 -P 3307 -u root -p

参考文献

https://hub.docker.com/_/mysql

http://netsite.win/2018/06/13/mysql/mysql8%E5%88%9B%E5%BB%BA%E7%94%A8%E6%88%B7%E5%8F%8A%E6%8E%88%E6%9D%83-%E8%BF%9C%E7%A8%8B%E8%BF%9E%E6%8E%A5-%E5%9D%91/