개발
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'
얼핏 봐도 권한 문제인 걸 확인할 수 있고, 이를 해결하기 위해 다양한 시도를 해봤습니다.
- `logs/` 폴더의 권한을 755로 변경하기
- `logs/` 폴더의 소유자를 root로 변경하기
- 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를 변경해주는 스크립트입니다.