- 诊断潜在问题
- 500 内部错误
- 权限问题
ruby_block
资源ruby_block
上错误的执行操作- Linux ACL 问题
- 容器中
/dev/shm
的挂载空间不足 - 由于
json-file
导致 Docker 容器耗尽空间 - 当启动容器时遇到缓冲区溢出错误
- ThreadError Thread Operation not permitted
对使用 Docker 安装的极狐GitLab 进行故障排查
当在 Docker 容器中安装极狐GitLab 时,你可能会遇到以下问题。
诊断潜在问题
当对 Docker 安装的极狐GitLab 实例进行故障排查时,如下命令非常有帮助:
读取容器日志:
sudo docker logs gitlab
进入运行中的容器:
sudo docker exec -it gitlab /bin/bash
你可以像管理 Linux 软件包安装 那样,在容器内部管理极狐GitLab。
500 内部错误
当升级 Docker 镜像时,你可能会遇到所有路径都显示 500
页面的问题。如果发生这种情况,请重启容器:
sudo docker restart gitlab
权限问题
当从旧的极狐GitLab Docker 镜像升级时,你可能会遇到权限问题。这是由于在之前的镜像中没有正确的保留用户的权限。有一个脚本可以为所有文件修复权限。
要修复你的容器,执行 update-permissions
,然后重启容器:
sudo docker exec gitlab update-permissions
sudo docker restart gitlab
ruby_block
资源 ruby_block
上错误的执行操作
当在 Windows 或 Mac 上使用 Oracle VirtualBox 时,可能会遇到此错误。
Error executing action run on resource ruby_block[directory resource: /data/GitLab]
/c/Users
卷被挂载为一个 VirtualBox 共享文件夹,不支持所有 POSIX 文件系统功能。目录所有权和权限无法更改,除非重新挂载,因此会导致极狐GitLab 失败。
为你的平台切换到原生 Docker 安装,而不是使用 Docker Toolbox。
如果你无法使用原生的 Docker 安装(Windows 10 Home Edition 或 Windows 7/8),可行的解决方案为在 Docker Toolbox Boot2docker 上设置 NFS 共享,而不是 VirtualBox 共享。
Linux ACL 问题
如果你在 Docker 宿主机上使用文件 ACL,docker
组需要对卷具有完全访问权限,以便极狐GitLab 正常工作:
getfacl $GITLAB_HOME
# file: $GITLAB_HOME
# owner: XXXX
# group: XXXX
user::rwx
group::rwx
group:docker:rwx
mask::rwx
default:user::rwx
default:group::rwx
default:group:docker:rwx
default:mask::rwx
default:other::r-x
如果这些值不正确,设置它们:
sudo setfacl -mR default:group:docker:rwx $GITLAB_HOME
默认的群组名称为 docker
。如果你修改了群组名称,你需要调整命令。
容器中 /dev/shm
的挂载空间不足
极狐GitLab 在 /-/metrics
处设有一个 Prometheus 指标端点,用于展示有关极狐GitLab 健康状况和性能的统计信息。实现这一功能所需的文件会被写入临时文件系统(如 /run
或 /dev/shm
)。
默认情况下,Docker 会为共享内存目录(挂载在 /dev/shm
处)分配 64 MB 的空间。这不足以存放生成的所有与 Prometheus 指标相关的文件,并且会产生类似以下的错误日志:
writing value to /dev/shm/gitlab/sidekiq/gauge_all_sidekiq_0-1.db failed with unmapped file
writing value to /dev/shm/gitlab/sidekiq/gauge_all_sidekiq_0-1.db failed with unmapped file
writing value to /dev/shm/gitlab/sidekiq/gauge_all_sidekiq_0-1.db failed with unmapped file
writing value to /dev/shm/gitlab/sidekiq/histogram_sidekiq_0-0.db failed with unmapped file
writing value to /dev/shm/gitlab/sidekiq/histogram_sidekiq_0-0.db failed with unmapped file
writing value to /dev/shm/gitlab/sidekiq/histogram_sidekiq_0-0.db failed with unmapped file
writing value to /dev/shm/gitlab/sidekiq/histogram_sidekiq_0-0.db failed with unmapped file
虽然你可以在 管理员 区域关闭 Prometheus 指标功能,但解决此问题的推荐方案是安装时 将共享内存至少设置为 256 MB。
如果你使用 docker run
命令,可以传递 --shm-size 256m
标志。如果你使用 docker-compose.yml
文件,可以设置 shm_size
键。
由于 json-file
导致 Docker 容器耗尽空间
Docker 使用 默认的 json-file
日志驱动,该驱动默认不会进行日志轮转。由于缺乏日志轮转机制,对于那些会产生大量输出的容器,json-file
驱动所存储的日志文件会占用大量的磁盘空间,这可能会导致磁盘空间耗尽。为了解决这个问题,若条件允许,可使用 journald
作为日志驱动,或者使用 其他支持日志轮转的驱动。
当启动容器时遇到缓冲区溢出错误
如果你接收到了此缓冲区溢出错误,你应该清除 /var/log/gitlab
中的旧日志文件:
buffer overflow detected : terminated
xargs: tail: terminated by signal 6
移除旧日志文件能帮助修复此错误并确保实例的干净启动。
ThreadError Thread Operation not permitted
can't create Thread: Operation not permitted
当在 不支持 clone3 函数的宿主机 上运行使用较新版本的 glibc
构建的容器时,就会出现此错误。在极狐GitLab 16.0 及更高版本中,容器镜像包含基于较新版本的 glibc
构建的 Ubuntu 22.04 Linux 软件包。
此问题在较新的容器运行时工具中没有发生,诸如 Docker 20.10.10。
要修复此问题,将 Docker 升级至 20.10.10 或更高版本。