Docker 환경에서 Gitea Runner 설정 오류 해결하기

SB신범
3분 읽기
조회수 로딩 중...

Docker 환경에서 Gitea Runner 설정 오류 해결하기

개발 환경을 구축하다 보면 다양한 컨테이너를 함께 운영하게 됩니다. 특히 CI/CD 파이프라인을 위한 Docker Registry와 Gitea Runner를 함께 구성할 때 종종 설정 오류가 발생하곤 합니다. 이번 글에서는 Gitea Runner 설정 시 발생할 수 있는 일반적인 오류와 해결 방법에 대해 살펴보겠습니다.

발생한 문제

Docker Compose로 Docker Registry, Registry UI, Gitea Runner를 함께 구성했을 때 다음과 같은 오류가 발생했습니다:

runner-1 | level=info msg="Registering runner, arch=amd64, os=linux, version=v0.2.11+7-g8b72d1c." runner-1 | Error: open config file "/config.yaml": read /config.yaml: is a directory runner-1 | Waiting to retry ...

위 오류 메시지를 보면 Gitea Runner가 /config.yaml을 설정 파일로 읽으려고 하는데, 이 경로가 파일이 아닌 디렉토리로 인식되고 있는 것을 알 수 있습니다.

문제의 원인

이 문제는 주로 다음과 같은 이유로 발생합니다:

  1. Docker 볼륨 마운트 시 로컬 시스템에 config.yaml 파일 대신 같은 이름의 디렉토리가 존재하는 경우
  2. Docker Compose 파일에서 볼륨 마운트 설정이 잘못된 경우
  3. 이전 실행 중 생성된 디렉토리 구조가 남아있는 경우

Docker Compose 설정 살펴보기

문제가 발생한 Docker Compose 설정을 살펴보겠습니다:

yaml
1services: 2 # Docker Registry 3 registry: 4 image: registry:2 5 ports: 6 - "5000:5000" 7 restart: always 8 volumes: 9 - ./registry-data:/var/lib/registry 10 environment: 11 REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /var/lib/registry 12 13 # Registry UI 14 registry-ui: 15 image: joxit/docker-registry-ui:latest 16 ports: 17 - "8080:80" 18 environment: 19 - REGISTRY_URL=http://registry:5000 20 - REGISTRY_TITLE=My Private Registry 21 depends_on: 22 - registry 23 24 # Gitea Runner 25 runner: 26 image: docker.io/gitea/act_runner:nightly 27 environment: 28 CONFIG_FILE: /config.yaml 29 GITEA_INSTANCE_URL: "${INSTANCE_URL}" 30 GITEA_RUNNER_REGISTRATION_TOKEN: "${REGISTRATION_TOKEN}" 31 GITEA_RUNNER_NAME: "${RUNNER_NAME}" 32 GITEA_RUNNER_LABELS: "${RUNNER_LABELS}" 33 volumes: 34 - ./config.yaml:/config.yaml 35 - ./data:/data 36 - /var/run/docker.sock:/var/run/docker.sock 37 depends_on: 38 - registry

여기서 중요하게 봐야 할 부분은 Gitea Runner의 볼륨 마운트 설정입니다:

yaml
1volumes: 2 - ./config.yaml:/config.yaml

해결 방법

1. 디렉토리 문제 해결하기

먼저 로컬 시스템에서 config.yaml 디렉토리를 제거하고 파일로 새로 생성합니다:

bash
1# 기존 디렉토리 삭제 2rm -rf ./config.yaml 3 4# 새 설정 파일 생성 5touch ./config.yaml

2. 적절한 설정 파일 작성하기

빈 파일보다는 적절한 설정을 포함한 config.yaml 파일을 작성하는 것이 좋습니다:

yaml
1# config.yaml 2log: 3 level: info 4runner: 5 file: /data/runner.db 6 capacity: 1

3. Docker Compose 파일 수정하기

볼륨 마운트 설정에 :ro 옵션을 추가하여 읽기 전용으로 마운트할 수 있습니다:

yaml
1volumes: 2 - ./config.yaml:/config.yaml:ro # 읽기 전용으로 마운트 3 - ./data:/data 4 - /var/run/docker.sock:/var/run/docker.sock

4. 서비스 재시작하기

변경 사항을 적용하기 위해 Docker Compose 서비스를 재시작합니다:

bash
1# 기존 컨테이너 중지 및 제거 2docker-compose down 3 4# 변경된 설정으로 서비스 시작 5docker-compose up -d 6 7# 로그 확인 8docker-compose logs -f runner

설정 검증하기

서비스가 정상적으로 시작된 후, 다음 명령어로 Gitea Runner가 제대로 등록되었는지 확인할 수 있습니다:

bash
1docker-compose exec runner act_runner list

정상적으로 등록된 경우, Runner의 상태가 'online'으로 표시됩니다.

결론

Docker 환경에서 Gitea Runner를 설정할 때 발생하는 config.yaml is a directory 오류는 대개 볼륨 마운트 설정과 관련된 문제입니다. 위의 단계에 따라 설정 파일을 올바르게 생성하고 마운트 설정을 수정하면 쉽게 해결할 수 있습니다.

이러한 경험은 Docker 볼륨을 사용할 때 파일과 디렉토리를 다루는 방법, 그리고 컨테이너 간의 의존성을 관리하는 방법에 대한 좋은 학습 기회가 됩니다. Docker Compose 환경에서 여러 서비스를 함께 운영할 때는 볼륨 마운트와 같은 세부 설정에 주의를 기울이는 것이 중요합니다.

참고 자료