Docker中运行ConcourseCI 3.13.0遇mount权限拒绝问题求助
我之前在Alpine虚拟机上部署Concourse 3.x版本时,也碰到过完全一样的mount权限报错,折腾了好一阵才找到几个有效的解决方向,你可以逐一试试:
检查流水线任务的privileged配置
很多人容易只给docker-image类型的资源加privileged: true,但任务本身也需要开启这个配置。确保你的job任务里明确加上privileged: true,比如:jobs: - name: hello-world plan: - task: say-hello privileged: true # 这里必须加! config: platform: linux image_resource: type: docker-image source: {repository: alpine} # 资源里的privileged配置是辅助,任务级别的才是关键 run: path: echo args: ["Hello World"]确认worker容器挂载目录的权限
如果你的Concourse worker在docker-compose里挂载了宿主机的目录(比如/worker),要确保宿主机上这个目录的所有者是root,且权限足够:chown root:root /path/to/your/worker-mount-dir chmod 755 /path/to/your/worker-mount-dir挂载目录权限不足会导致worker进程(即使是root)无法在里面创建挂载点。
切换Docker存储驱动为overlay2
Alpine Linux默认的Docker存储驱动可能是vfs,这种驱动不支持Concourse需要的挂载操作。先检查当前存储驱动:docker info | grep Storage Driver如果显示是
vfs,修改Docker配置文件/etc/docker/daemon.json(没有就新建):{ "storage-driver": "overlay2" }然后重启Docker和Concourse worker容器:
service docker restart docker-compose restart concourse-worker给worker容器添加额外的权限配置
虽然已经设置了privileged: true,但Alpine的内核有时候会有额外限制,你可以在docker-compose的worker服务里加上这些配置:services: concourse-worker: image: concourse/concourse:3.13.0 privileged: true cap_add: - SYS_ADMIN - IPC_LOCK security_opt: - seccomp:unconfined # 其他原有配置...这些配置可以绕过一些内核级的权限限制,解决挂载失败的问题。
先从任务配置和挂载目录权限这两点开始排查,这两个是最常见的触发原因,一般都能解决问题。
内容的提问来源于stack exchange,提问作者UncleSam

