개발

Airflow 컨테이너를 새로운 우분투 유저로 올리면서 생긴 일

31514 2025. 5. 12. 20:51

우분투 서버에 새로운 유저를 만들고, Airflow 컨테이너를 올리는 과정에 겪은 문제를 기록합니다.

 

rootless-docker를 사용했고, 유저명은 niscom입니다.

 

먼저 Airflow 공식 홈페이지에서 docker-compose.yaml 파일을 다운로드 받습니다.

 

저는 2.9.1 버전을 선택했고, Playwright 라이브러리를 사용해야 했기 때문에 `build .` 주석 처리를 해제합니다.

 

Airflow docker-compose.yaml 파일을 살펴보면 user와 관련된 설정이 있는데, Airflow UID:GID로 구성되어 있습니다.

 

새로운 유저로 아무런 설정 없이 `docker compose up -d`를 실행하면 다음과 같은 오류가 발생합니다.

 

airflow-scheduler-1  | PermissionError: [Errno 13] Permission denied: '/opt/airflow/logs/dag_processor_manager/dag_processor_manager.log'

 

얼핏 봐도 권한 문제인 걸 확인할 수 있고, 이를 해결하기 위해 다양한 시도를 해봤습니다.

 

  1. `logs/` 폴더의 권한을 755로 변경하기
  2. `logs/` 폴더의 소유자를 root로 변경하기
  3. airflow docker-compose.yaml 파일에서 user UID를 niscom 유저 id로 변경하기

 

하지만 결국 해결되지 않았고, 문제를 각 폴더의 GID라는 것을 알게 되었습니다.

 

이를 위해 다음과 같은 스크립트를 작성했습니다.

 

#!/bin/bash

# 현재 UID / GID 확인
AIRFLOW_UID=$(id -u)
AIRFLOW_GID=$(id -g)

# .env 파일 생성 또는 업데이트
echo "AIRFLOW_UID=${AIRFLOW_UID}" > .env

# 폴더 목록
dirs=("logs" "dags" "plugins" "data")

# 각 폴더가 없다면 생성하고, 소유권 변경
for dir in "${dirs[@]}"; do
  mkdir -p "$dir"
  sudo chown -R "${AIRFLOW_UID}:${AIRFLOW_GID}" "$dir"
done

echo ".env 및 디렉토리 권한 설정 완료 ✅"

docker compose up -d

echo "Airflow 컨테이너 실행 완료 ✅"

 

위 스크립트는 Airflow가 사용하는 각 폴더의 유저 ID와 그룹 ID를 변경해주는 스크립트입니다.