- 拉取镜像
- docker pull mysql:8.0.19
- 观察镜像里的配置文件目录结构
- docker run --rm -it docker.io/mysql:8.0.19 /bin/bash
- ls 查看目录
- 创建挂载文件(把MySQL配置文件以及数据库文件挂载到容器外,即宿主机路径下)
- 在/opt/docker/mysql路径下创建conf以及data两个文件
- cd /opt/docker/mysql/conf
- 创建文件touch my.cnf
- 修改文件内容
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
default_authentication_plugin=mysql_native_password
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
max_connections=10000
default-time_zone='+8:00'
character-set-client-handshake=FALSE
character_set_server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci'
# Custom config should go here
!includedir /etc/mysql/conf.d/
- MySQL8.0版本必须配置secure_file_priv,不然启动状态为Exited(1),通过
docker logs -f -t --tail 70 mysql8.0
查看日志命令,会发现相关的报错提示 - 同时,假如需要用工具(比如Navicat)连接数据库,需要配置Navicat的密码规则
default_authentication_plugin=mysql_native_password
,不然也会以下报错 - 最后执行启动命令
-
docker run -p 3306:3306 --restart=always --privileged=true --name mysql -v /opt/docker/mysql/conf:/etc/mysql/conf.d -v /opt/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456! -d mysql:8.0.19
-
docker run -p 3306:3306 \ --privileged=true --name mysql \ -v /opt/docker/mysql/conf:/etc/mysql/conf.d \ -v /opt/docker/mysql/data:/var/lib/mysql \ -v /opt/docker/mysql/logs:/var/log \ -e MYSQL_ROOT_PASSWORD=123456! \ -d mysql:8.0.19
-
-p 端口映射,格式为:主机(宿主)端口:容器端口
–restart=always 设置随服务启动而启动容器
–name 命名容器名称
-v 设置挂载点,格式为:主机(宿主)目录:容器目录
-e 设置环境变量
-d 后台运行容器,并返回容器ID
–privileged=true 使用该参数,container内的root拥有真正的root权限
对于已经运行但没设置随docker服务的启动而启动容器的可以执行命令 docker update –restart=always 容器名
-