- 编写Dockerfile
FROM mysql:8.0.39
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
- 编写docker-compose.yml,与Dockerfile在同目录中
services:
db:
build:
context: ./
image: mysql:8.0.39
container_name: mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root # 设置root用户的密码
- MYSQL_ROOT_HOST=% # 允许从任何主机连接
- TZ=Asia/Shanghai
ports:
- 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_password
volumes:
# 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中未使用的镜像缓存,可能可以解决这个问题(我是这样解决的)
- 可以尝试