Docker挂载主机目录访问如果出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,
在SELinux里面挂载目录被禁止掉了额,如果要开启,我们一般使用--privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即
使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。
docker 挂载redis
1、以docker启动redis挂载配置文件以及备份数据文件为例
(60条消息) docker部署redis,并实现本地redis.conf配置加载_世外平常人的博客-CSDN博客_docker redis redis.conf
docker挂载mysql 开启容器卷
1、下载镜像文件
docker pull mysql:5.7
2、创建实例并启动
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
-v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机
-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码 MySQL 配置
vi /mydata/mysql/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SETcollation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
注意:解决 MySQL 连接慢的问题 在配置文件中加入如下,并重启 mysql [mysqld] skip-name-resolve
解释: skip-name-resolve:跳过域名解析
3、通过容器的 mysql 命令行工具连接
docker exec -it mysql mysql -uroot -proot
4、设置 root 远程访问
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option; flush privileges;
5、进入容器文件系统
docker exec -it mysql /bin/bas
开启bin log
[mysqld] log-bin=/var/lib/mysql/mysql-bin server-id=1 binlog_format=MIXED expire_logs_days=30 ##binlog日志有三种格式:Statement、Row以及Mixed。 mysql默认采用statement, ##这里使用mixed ##expire_logs_days是日志过期时间,这里配置为30天,默认是0,0是永久的意思
重启容器docker restart mysql,即可开启binlog。可使用相关命令查询binlog:
##查看binlog日志是否开启 show variables like '%log_bin%'; ##查看binlog日志路径 show variables like '%datadir%'; ##刷新日志,会新建一个binlog日志文件 flush logs ##查看日志详情内容 show binlog events in 'mysql-bin.000002'; ##查看日志过期时间 0为永久 show variables like 'expire_logs_days';
通过binlog日志恢复数据
mysql自带mysqlbinlog工具。进入docker容器直接运行指令:
mysqlbinlog --start-datetime='2021-01-20 05:02:02' --stop-datetime='2021-01-20 09:02:02' /var/lib/mysql/mysql-bin.000001 | mysql -u root -p
即可恢复数据。其中参数解释如下:
--start-datetime='2021-01-20 05:02:02' 开始时间 --stop-datetime='2021-01-20 09:02:02' 结束时间 /var/lib/mysql/mysql-bin.000001 binlog日志文件,如有多个文件,可按顺序 写下,以空格隔开 | mysql -u root -p 表示以root账号执行mysql的数据恢复