- 编写Dockerfile
From mysql:8.0.39ENV TZ=Asia/ShanghaiRun ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
- 编写docker-compose.yml,与Dockerfile在同目录中
services:db:build:context: ./image: mysql:8.0.39container_name: mysqlrestart: alwaysenvironment:- MYSQL_ROOT_PASSWORD=root # 设置root用户的密码- MYSQL_ROOT_HOST=% # 允许从任何主机连接- TZ=Asia/Shanghaiports:- 3306:3306 # 映射端口到宿主机command: # MySQL启动时执行的命令行参数- --lower_case_table_names=1- --character_set_server=utf8mb4- --collation_server=utf8mb4_general_ci- --explicit_defaults_for_timestamp=true- --max_allowed_packet=128M# 这个参数在MySQL8.4中已经被删除- --default_authentication_plugin=caching_sha2_passwordvolumes:# MySQL8.0.19的my.cnf在/etc/mysql/my.cnf,新版本位置都在/etc/my.cnf# 如不需要也可以使用默认的将这个挂载删掉- /root/workspace/docker/my.cnf:/etc/my.cnf# MySQL数据- /root/workspace/docker/volumn:/var/lib/mysql# MySQL日志,在my.cnf中开启- /root/workspace/docker/volumn_logs:/var/log/mysql
- 运行
docker-compose up -d
- 如果网络问题镜像拉取不下来,需要配置docker源,或者在Dockerfile的拉取镜像代码配置一次性源
- 输入指令后运行
docker ps
,查看容器是否正常运行,如果一直restart再通过docker logs container_id
查看报错及解决方案
- 如果报错
'/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
- 可以尝试
docker system prune -a
,这样会清楚掉服务器docker中未使用的镜像缓存,可能可以解决这个问题(我是这样解决的)