GitLab Runner容器启动失败:创建挂载路径遭遇只读文件系统错误
GitLab Runner容器启动失败:创建挂载路径遭遇只读文件系统错误
看起来你遇到的核心问题是宿主机的/srv目录(或其所在的根分区)被挂载为只读状态,导致Docker没法创建挂载需要的/srv/gitlab-runner/config目录。我来帮你一步步排查和解决这个问题:
一、先确认文件系统的只读状态
先仔细核对下分区的挂载状态,执行这条命令:
mount | grep -E '(srv|/)'
如果输出里能看到ro标识,就实锤了是只读挂载。这种情况一般是系统启动时文件系统出了错误,或者分区被手动设置成了只读模式。
二、尝试修复只读挂载的分区
1. 先试试重新挂载根分区为读写
如果/srv是根分区的一部分,别直接remount /srv,应该针对根分区操作:
sudo mount -o remount,rw /
要是报错说“device is busy”,可以先看看哪些进程在占用根分区(用lsof /查看),关掉这些进程再试;如果是服务器的话,也可以考虑进入单用户模式再执行重新挂载命令。
2. 检查并修复文件系统错误
如果重新挂载还是失败,大概率是文件系统损坏了,得进行修复:
- 要是你用的是ext系列文件系统(ext2/ext3/ext4),先尝试卸载分区(能卸载的话):
sudo umount /srv
然后执行修复命令:
sudo fsck.ext4 /dev/[你的srv分区设备名]
注意:把/dev/[你的srv分区设备名]换成实际的设备路径,比如/dev/sda2,可以用df -h /srv查到具体路径。
- 如果是xfs文件系统,执行:
sudo xfs_repair /dev/[你的srv分区设备名]
同样需要先卸载分区,没法卸载的话就得进单用户模式或者用安装介质启动后再修复。
三、如果没法修复只读分区,换个挂载目录
要是/srv分区确实没法改成读写状态,那就换一个本来就是读写的目录来挂载GitLab Runner的配置,比如用/home目录下的路径:
修改启动命令为:
sudo docker run -d --privileged --name gitlab-runner --restart always \ -v /home/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest
先手动创建这个目录并设置正确权限:
sudo mkdir -p /home/gitlab-runner/config sudo chown 1000:1000 /home/gitlab-runner sudo chmod 755 /home/gitlab-runner
四、验证容器启动状态
修复挂载或者换好目录后,重新执行启动命令,然后用下面的命令检查容器状态:
docker ps -a | grep gitlab-runner docker logs gitlab-runner
如果容器状态显示Up,那就说明启动成功啦。
备注:内容来源于stack exchange,提问作者It Engineer
相关产品推荐
相关产品推荐

