Concourse本地部署Docker权限错误:Hello-World流水线执行失败
解决Concourse CI Hello-World流水线的runc容器启动错误
我之前也碰到过类似的Concourse容器挂载失败问题,结合踩坑经验,给你几个针对性的排查和解决方向:
1. 先检查Worker节点的文件权限
这个错误的核心是runc没法把init程序挂载到容器的rootfs里,首当其冲要排查目录权限:
- 先跑命令看看相关路径的权限和归属:
ls -ld /worker-state /worker-state/3.8.0/assets/bin/init /worker-state/volumes/live/a8d3b403-19e7-4f16-4a8a-40409a9b017f/volume/rootfs - 如果发现权限不对,或者归属不是Concourse worker的运行用户(一般是
concourse),就用这两个命令修正:
确保worker进程能读写执行这些目录里的内容。chown -R concourse:concourse /worker-state chmod -R 755 /worker-state
2. 检查版本兼容性问题
你用的是Concourse 3.8.0?这个版本确实有点老了,很可能和你当前宿主机的内核、runc版本不兼容:
- 建议优先升级到较新的稳定版本(比如v7.x或者v8.x系列),新版本修复了很多旧的容器运行逻辑问题,适配性更好。
- 如果一定要用3.8.0,得确认宿主机内核版本在它的支持范围内(官方建议3.10+,但实际用4.x以上的内核更稳定)。
3. 关闭宿主机的安全模块干扰
很多时候这类挂载失败是selinux或者apparmor在搞事情:
- 临时关闭selinux试试:
然后重新运行流水线,如果问题解决了,要么修改setenforce 0/etc/selinux/config把SELINUX改成disabled永久关闭,要么给Concourse worker配置对应的selinux规则。 - 如果是apparmor的问题,就临时停止并禁用它:
重启worker节点后再测试流水线。systemctl stop apparmor systemctl disable apparmor
4. 核对Worker的启动配置
看看worker启动时的工作目录参数是不是正确:
- 确认启动命令里的
--work-dir是不是指向/worker-state,比如正确的启动命令大概是这样:
如果工作目录配置错了,会直接导致路径找不到或者权限异常。concourse worker --work-dir /worker-state --tsa-host <你的TSA服务器IP>:2222 --tsa-public-key /concourse/keys/tsa_host_key.pub --tsa-worker-private-key /concourse/keys/worker_key
5. 清理旧的Volume缓存
有时候残留的旧volume缓存会导致挂载冲突,试试清理一下:
- 先停掉worker服务:
systemctl stop concourse-worker - 删除volume目录下的所有缓存:
rm -rf /worker-state/volumes/* - 重启worker后再重新运行Hello-World流水线。
内容的提问来源于stack exchange,提问作者Dwayne Forde
相关产品推荐
相关产品推荐

