- 잠재적인 문제 진단
- 500 내부 오류
- 권한 문제
- 리소스
ruby_block
에서 작업 실행 오류 - Linux ACL 문제
- 도커 컨테이너에서
/dev/shm
마운트가 충분한 공간이 없는 경우 - Docker 컨테이너가
json-file
로 인해 공간을 소모함 - Docker 시작 시 버퍼 오버플로우 오류
- ThreadError 스레드 생성 불가: 권한 없음
도커 컨테이너에서 실행 중인 GitLab 문제 해결
도커 컨테이너에 GitLab을 설치할 때, 다음과 같은 문제에 직면할 수 있습니다.
잠재적인 문제 진단
다음 명령어는 도커 컨테이너에서 GitLab 인스턴스를 문제 해결할 때 유용합니다:
컨테이너 로그 읽기:
sudo docker logs gitlab
실행 중인 컨테이너에 들어가기:
sudo docker exec -it gitlab /bin/bash
컨테이너 내부에서 GitLab 컨테이너를 관리할 수 있습니다. 마치 Linux 패키지 설치를 관리하듯이 말이죠.
500 내부 오류
도커 이미지를 업데이트할 때, 모든 경로가 500
페이지를 표시하는 문제에 직면할 수 있습니다. 이러한 경우, 컨테이너를 재시작하세요:
sudo docker restart gitlab
권한 문제
이전 GitLab 도커 이미지에서 업데이트할 때 권한 문제에 직면할 수 있습니다. 이는 이전 이미지에서 사용자 권한이 제대로 보존되지 않은 경우 발생합니다. 모든 파일의 권한을 수정하는 스크립트가 있습니다.
컨테이너를 수정하려면 update-permissions
를 실행하고 그 후에 컨테이너를 재시작하세요:
sudo docker exec gitlab update-permissions
sudo docker restart gitlab
리소스 ruby_block
에서 작업 실행 오류
이 오류는 Windows 또는 Mac의 Oracle VirtualBox와 함께 Docker Toolbox를 사용할 때 발생하며, Docker 볼륨을 사용하는 경우입니다:
Error executing action run on resource ruby_block[directory resource: /data/GitLab]
/c/Users
볼륨은 VirtualBox 공유 폴더로 마운트되며, 모든 POSIX 파일 시스템 기능을 지원하지 않습니다. 디렉터리 소유권과 권한은 다시 마운트하지 않고 변경할 수 없으며, 따라서 GitLab이 실패합니다.
Docker Toolbox 대신 플랫폼에 맞는 네이티브 Docker 설치로 전환하세요.
Windows 10 Home Edition이나 Windows 7/8의 경우 네이티브 Docker 설치를 사용할 수 없다면, Docker Toolbox Boot2docker에 VirtualBox 공유 대신 NFS 마운트를 설정하는 대안 솔루션이 있습니다.
Linux ACL 문제
도커 호스트에서 파일 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 메트릭 엔드포인트를 제공합니다. 이를 위해 필요한 파일은 임시 파일 시스템(예: /run
또는 /dev/shm
)에 기록됩니다.
기본적으로 도커는 공유 메모리 디렉터리(/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
Admin 영역에서 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
에서 이전 로그 파일을 정리해야 합니다:
버퍼 오버플로우가 감지되었습니다: 종료됨
xargs: tail: 신호 6으로 종료됨
이전 로그 파일을 제거하면 오류가 수정되고 인스턴스가 정상적으로 시작됩니다.
ThreadError 스레드 생성 불가: 권한 없음
스레드를 생성할 수 없습니다: 권한 없음
이 오류는 최신 glibc
버전으로 구축된 컨테이너를 clone3 기능을 지원하지 않는 호스트에서 실행할 때 발생합니다. GitLab 16.0 및 이후 버전의 컨테이너 이미지는 최신 glibc
버전으로 구축된 Ubuntu 22.04 Linux 패키지를 포함합니다.
이 문제는 Docker 20.10.10과 같은 최신 컨테이너 런타임 도구에서는 발생하지 않습니다.
이 문제를 해결하려면 Docker를 버전 20.10.10 또는 이후로 업데이트하세요.