도커 컨테이너에서 GitLab 문제 해결

Tier: Free, Premium, Ultimate Offering: Self-managed

도커 컨테이너에 GitLab을 설치할 때 다음과 같은 문제가 발생할 수 있습니다.

잠재적 문제 진단

Docker 컨테이너에서 GitLab 인스턴스를 문제 해결할 때 유용한 다음 명령어들입니다:

컨테이너 로그 읽기:

sudo docker logs gitlab

실행 중인 컨테이너에 들어가기:

sudo docker exec -it gitlab /bin/bash

Linux 패키지 설치를 관리하는 것과 마찬가지로 컨테이너 내에서 GitLab 컨테이너를 관리할 수 있습니다.

500 내부 오류

도커 이미지를 업데이트하는 도중 모든 경로에서 500 페이지가 표시되는 문제가 발생할 수 있습니다. 이 경우 컨테이너를 재시작하십시오:

sudo docker restart gitlab

권한 문제

이전 GitLab 도커 이미지에서 업데이트할 때 권한 문제가 발생할 수 있습니다. 이는 이전 이미지의 사용자 권한이 올바르게 보존되지 않았을 때 발생합니다. 모든 파일에 대해 권한을 수정하는 스크립트가 있습니다.

컨테이너를 수정하려면 update-permissions를 실행한 다음 컨테이너를 다시 시작하십시오:

sudo docker exec gitlab update-permissions
sudo docker restart gitlab

자원 ruby_block에서 작업 실행 오류

이 오류는 Windows 또는 Mac에서 Docker Toolbox를 Oracle VirtualBox와 함께 사용하고 Docker 볼륨을 사용할 때 발생합니다:

Error executing action run on resource ruby_block[directory resource: /data/GitLab]

/c/Users 볼륨은 VirtualBox 공유 폴더로 마운트되며 모든 POSIX 파일 시스템 기능을 지원하지 않습니다. 디렉토리 소유권 및 권한을 변경할 수 없으며 GitLab에서 실패합니다.

Docker Toolbox 대신 플랫폼에 네이티브 Docker 설치를 사용하도록 전환하십시오.

네이티브 Docker 설치를 사용할 수 없는 경우(Windows 10 Home Edition 또는 Windows 7/8), Docker Toolbox Boot2docker에 대한 VirtualBox 공유 대신 NFS 마운트를 설정하는 대체 솔루션이 있습니다.

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에 마운트됨)에 64MB를 할당합니다. 이는 생성된 모든 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 메트릭을 끄는 방법은 있지만, 이 문제를 해결하기 위한 권장 방법은 공유 메모리 크기를 최소 256MB로 설정하는 방법입니다. docker run을 사용하는 경우 --shm-size 256m 플래그를 전달할 수 있습니다. docker-compose.yml 파일을 사용하는 경우 shm_size 키를 설정할 수 있습니다.

Docker 컨테이너의 json-file로 인한 공간 부족

Docker는 기본으로 json-file 로깅 드라이버를 사용하며 기본적으로 로그를 회전하지 않습니다. 따라서 json-file 드라이버에 의해 저장된 로그 파일은 많은 출력을 생성하는 컨테이너들에 대해 상당한 양의 디스크 공간을 차지할 수 있습니다. 이로 인해 디스크 공간 부족이 발생할 수 있습니다. 이 문제를 해결하기 위해 가능한 경우 네이티브 로테이션 지원을 갖는 journald를 사용하거나 다른 지원되는 드라이버를 사용하십시오.

도커 시작 시 버퍼 오버플로 오류

버퍼 오버플로 오류가 발생하면 /var/log/gitlab에서 이전 로그 파일을 삭제해야 합니다:

buffer overflow detected : terminated
xargs: tail: terminated by signal 6

이전 로그 파일을 제거하여 오류를 해결하고 인스턴스를 깨끗하게 시작할 수 있습니다.

ThreadError 쓰레드 생성 불가능: 작업이 허용되지 않음

can't create Thread: Operation not permitted

이 오류는 호스트에서 clone3 함수를 지원하지 않는 경우에 최신 glibc 버전으로 빌드된 컨테이너 이미지를 사용할 때 발생합니다. GitLab 16.0 이상에서는 Ubuntu 22.04 Linux 패키지가 포함된 컨테이너 이미지를 사용합니다.

이 문제는 Docker 20.10.10과 같은 최신 컨테이너 런타임 도구에서 발생하지 않습니다.

이 문제를 해결하려면 Docker를 20.10.10 버전 이상으로 업데이트하십시오.