对使用 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 或更高版本。