情况
今天用docker部署jenkins的时候碰到问题了,挂载的目录权限出现了问题。本人的解决办法是临时关闭selinux即可
报错代码
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
问题所在
centos7中安全模块selinux把权限禁掉了。
jenkins的composer
version: "3"
services:
jenkins:
build: .
container_name: jenkins
ports:
- "8083:8080"
volumes:
- "/home/jenkins:/var/jenkins_home"
image: jenkins/jenkins:lts
restart: always
处理流程
- 先不添加挂载的情况查看一下文件需要的用户权限是啥,这里显示的是jenkins:jenkins
- 心思直接赋上1000的权限,才发现容器内外权限不能通用
- 临时禁用selinux
setenforce 0
- 启动jenkins容器即可
四种解决方案
1.在运行时加 --privileged=true
docker run -d -p 8083:8080 -v /home/jenkins:/var/jenkins_home --privileged=true --name jenkins jenkins/jenkins:lts
2.临时关闭selinux然后再打开
[root@localhost home]# setenforce 0
[root@localhost home]# docker start jenkins
[root@localhost home]# setenforce 1
3.永久关闭selinux,修改/etc/selinux/config
SELINUX=enforcing
改为
SELINUX=disabled
4.添加linux规则,把要挂载的目录添加到selinux白名单
chcon -Rt svirt_sandbox_file_t /home/jenkins/
chcon命令简介
chcon命令 是修改对象(文件)的安全上下文,比如:用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。使用--reference选项时,把指定文件的安全环境设置为与参考文件相同。chcon命令位于/usr/bin/chcon。
语法
chcon [选项]... 环境 文件...
chcon [选项]... [-u 用户] [-r 角色] [-l 范围] [-t 类型] 文件...
chcon [选项]... --reference=参考文件 文件...
选项
-h, --no-dereference:影响符号连接而非引用的文件。
--reference=参考文件:使用指定参考文件的安全环境,而非指定值。
-R, --recursive:递归处理所有的文件及子目录。
-v, --verbose:为处理的所有文件显示诊断信息。
-u, --user=用户:设置指定用户的目标安全环境。
-r, --role=角色:设置指定角色的目标安全环境。
-t, --type=类型:设置指定类型的目标安全环境。
-l, --range=范围:设置指定范围的目标安全环境。
以下选项是在指定了-R选项时被用于设置如何穿越目录结构体系。如果您指定了多于一个选项,那么只有最后一个会生效。
-H:如果命令行参数是一个通到目录的符号链接,则遍历符号链接。
-L:遍历每一个遇到的通到目录的符号链接。
-P:不遍历任何符号链接(默认)。
--help:显示此帮助信息并退出。
--version:显示版本信息并退出。