InfoGrab Docs

Docker 컨테이너에서 실행 중인 GitLab 문제 해결

요약

Docker 컨테이너에 GitLab을 설치할 때 다음과 같은 문제가 발생할 수 있습니다. 다음 명령은 Docker 컨테이너에서 GitLab 인스턴스 문제를 해결할 때 유용합니다: 컨테이너 내에서 Linux 패키지 설치를 관리하듯이 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 리소스에서 작업 실행 오류#

이 오류는 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 설치를 사용하도록 전환합니다.

기본 Docker 설치를 사용할 수 없는 경우(Windows 10 Home Edition, Windows 7/8), Docker Toolbox Boot2docker에 VirtualBox 공유 대신 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에는 GitLab의 상태 및 성능에 대한 통계를 노출하는 /-/metrics의 Prometheus 지표 엔드포인트가 있습니다. 이에 필요한 파일은 임시 파일 시스템(/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 키를 설정할 수 있습니다.

json-file로 인한 Docker 컨테이너 공간 소진#

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 이상에서 컨테이너 이미지는 최신 glibc 버전으로 빌드된 Ubuntu 22.04 Linux 패키지를 포함합니다.

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

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

Docker 컨테이너에서 실행 중인 GitLab 문제 해결

Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed
원문 보기
요약

Docker 컨테이너에 GitLab을 설치할 때 다음과 같은 문제가 발생할 수 있습니다. 다음 명령은 Docker 컨테이너에서 GitLab 인스턴스 문제를 해결할 때 유용합니다: 컨테이너 내에서 Linux 패키지 설치를 관리하듯이 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 리소스에서 작업 실행 오류#

이 오류는 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 설치를 사용하도록 전환합니다.

기본 Docker 설치를 사용할 수 없는 경우(Windows 10 Home Edition, Windows 7/8), Docker Toolbox Boot2docker에 VirtualBox 공유 대신 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에는 GitLab의 상태 및 성능에 대한 통계를 노출하는 /-/metrics의 Prometheus 지표 엔드포인트가 있습니다. 이에 필요한 파일은 임시 파일 시스템(/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 키를 설정할 수 있습니다.

json-file로 인한 Docker 컨테이너 공간 소진#

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 이상에서 컨테이너 이미지는 최신 glibc 버전으로 빌드된 Ubuntu 22.04 Linux 패키지를 포함합니다.

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

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