Docker를 사용하는 GitLab 설치 문제 해결

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

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 리소스에서 실행 작업 오류

이 오류는 Windows 또는 Mac에 VirtualBox로 Docker Toolbox를 사용하고 도커 볼륨을 사용하는 경우에 발생합니다.

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

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

권장하는 해결책은 플랫폼의 네이티브 도커 설치를 사용하는 것입니다. Docker Toolbox를 사용할 수 없는 경우(Windows 10 Home Edition 또는 Windows 7/8), Docker Toolbox의 boot2docker에 대신해서 NFS 마운트를 설정하는 대체 솔루션이 있습니다.

Linux ACL 문제

Docker 호스트에서 파일 ACL을 사용하는 경우, GitLab이 작동하려면 docker 그룹이 볼륨에 대한 전체 액세스가 필요합니다:

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에는 /run이나 /dev/shm과 같은 임시 파일 시스템에 노출되는 Prometheus 메트릭 엔드포인트가 포함되어 있습니다.

기본적으로 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를 사용하거나, 기본 로깅 드라이버에 로테이션 지원을 제공하는 다른 지원되는 드라이버를 사용하세요.

Docker 시작 시 버퍼 오버플로 오류

이 버퍼 오버플로 오류가 발생하면, /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 리눅스 패키지를 포함하고 있으며, 이 패키지는 이 새로운 glibc로 빌드됩니다.

이 문제는 Docker 20.10.10과 같은 새로운 컨테이너 실행 도구로 해결됩니다.

이 문제를 해결하려면, Docker를 20.10.10 버전 이상으로 업데이트하세요.