docker run -p 3306:3306 --name mysql8 \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=666 -d mysql:8.0.32
执行这个命令的时候闪退,其实这个是命令是对你的文件夹有一些要求的,有时你如果像直接挂载到你本机的文件夹上需要内部还有一些文件。
比如我直接执行这个命令后,就报错说里面没有这个文件夹
[root@VM-4-3-centos conf]# docker logs -f mysql8
2023-08-15 11:06:21+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.32-1.el8 started.
2023-08-15 11:06:21+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check configcommand was: mysqld --verbose --help --log-bin-index=/tmp/tmp.TrKu2MmuH2mysqld: Can't read dir of '/etc/mysql/conf.d/' (OS errno 2 - No such file or directory)
mysqld: [ERROR] Stopped processing the 'includedir' directive in file /etc/my.cnf at line 36.
mysqld: [ERROR] Fatal error in defaults handling. Program aborted
其实我们有时候没必要直接挂载到你指定的文件夹上,我们可让docker自己帮我们创建这个数据卷,可以把命令改成
mysql_log、mysql_data、mysql_conf这几个数据卷会有docker帮我们管理。
docker run -p 3306:3306 --name mysql8 \
-v mysql_log:/var/log/mysql \
-v mysql_data:/var/lib/mysql \
-v mysql_conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=666 -d mysql:8.0.32
你可以用docker volume inspect mysql_data
来查看挂载的位置
[root@VM-4-3-centos docker]# docker volume inspect mysql_data
[{"CreatedAt": "2023-08-15T19:14:15+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/mysql_data/_data","Name": "mysql_data","Options": null,"Scope": "local"}
]
Mountpoint就是挂载点了
你可以cd进去
[root@VM-4-3-centos docker]# cd /var/lib/docker/volumes/mysql_data/_data
[root@VM-4-3-centos _data]# ll
total 99728
-rw-r----- 1 polkitd input 56 Aug 15 19:14 auto.cnf
-rw-r----- 1 polkitd input 3039831 Aug 15 19:14 binlog.000001
-rw-r----- 1 polkitd input 36671 Aug 15 19:16 binlog.000002
-rw-r----- 1 polkitd input 32 Aug 15 19:14 binlog.index
-rw------- 1 polkitd input 1680 Aug 15 19:14 ca-key.pem
-rw-r--r-- 1 polkitd input 1112 Aug 15 19:14 ca.pem
-rw-r--r-- 1 polkitd input 1112 Aug 15 19:14 client-cert.pem
这样就完成了容器的启动和挂载😆