- 诊断潜在问题
- 500 内部错误
- 权限问题
- 执行资源
ruby_block
的操作运行时错误 - Linux ACL 问题
- Docker 容器中的
/dev/shm
挂载空间不足 - Docker 容器由于
json-file
耗尽空间 - 启动 Docker 时缓冲区溢出错误
- ThreadError 无法创建线程 操作不允许
{{< details >}}
- Tier: 基础版,专业版,旗舰版
- Offering: 私有化部署
{{< /details >}}
在 Docker 容器中安装极狐GitLab 时,您可能会遇到以下问题。
诊断潜在问题
以下命令在排查极狐GitLab 实例在 Docker 容器中遇到的问题时非常有用:
读取容器日志:
sudo docker logs gitlab
进入正在运行的容器:
sudo docker exec -it gitlab /bin/bash
500 内部错误
更新 Docker 映像时,您可能会遇到所有路径显示 500
页面的问题。如果发生这种情况,请重启容器:
sudo docker restart gitlab
权限问题
从旧的极狐GitLab Docker 映像更新时,您可能会遇到权限问题。这发生在以前的映像中用户权限未正确保留时。有一个脚本可以修复所有文件的权限。
要修复您的容器,请执行 update-permissions
并在之后重启容器:
sudo docker exec gitlab update-permissions
sudo docker restart gitlab
执行资源 ruby_block
的操作运行时错误
使用 Docker Toolbox 和 Oracle VirtualBox 在 Windows 或 Mac 上运行 Docker 时,以及使用 Docker 卷时,会出现此错误:
Error executing action run on resource ruby_block[directory resource: /data/GitLab]
/c/Users
卷被挂载为 VirtualBox 共享文件夹,不支持所有 POSIX 文件系统功能。目录所有权和权限无法在不重新挂载的情况下更改,因此极狐GitLab 失败。
切换到适用于您的平台的原生 Docker 安装,而不是使用 Docker Toolbox。
如果您无法使用原生 Docker 安装(Windows 10 家庭版,或 Windows 7/8),可以选择设置 NFS 挂载而不是 VirtualBox 共享来解决 Docker Toolbox Boot2docker 的问题。
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
。如果您更改了组名,则需要调整该命令。
Docker 容器中的 /dev/shm
挂载空间不足
极狐GitLab 提供了一个 Prometheus 指标端点在 /-/metrics
以公开有关极狐GitLab 健康和性能的统计信息。所需文件写入临时文件系统(例如 /run
或 /dev/shm
)。
默认情况下,Docker 为共享内存目录分配 64 MB(挂载在 /dev/shm
)。这不足以容纳所有与 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
键。
Docker 容器由于 json-file
耗尽空间
Docker 使用 json-file
默认日志驱动,默认情况下不执行日志轮换。由于缺乏轮换,json-file
驱动存储的日志文件可能会消耗大量磁盘空间,特别是对于生成大量输出的容器。这可能导致磁盘空间耗尽。为了解决此问题,请在可用时使用 journald
作为日志驱动,或者使用具有本地轮换支持的 其他支持的驱动。
启动 Docker 时缓冲区溢出错误
如果收到缓冲区溢出错误,您应清除 /var/log/gitlab
中的旧日志文件:
buffer overflow detected : terminated
xargs: tail: terminated by signal 6
删除旧日志文件有助于修复错误,并确保实例的干净启动。
ThreadError 无法创建线程 操作不允许
can't create Thread: Operation not permitted
此错误发生在使用较新的 glibc
版本构建的容器在不支持 clone3 功能的主机上运行时。在极狐GitLab 16.0 及更高版本中,容器镜像包含了 Ubuntu 22.04 Linux 软件包,该软件包使用较新的 glibc
版本构建。
此问题不会在较新的容器运行时工具中发生,例如 Docker 20.10.10。
要解决此问题,请将 Docker 更新到版本 20.10.10 或更高版本。