본문으로 건너뛰기

Docker 기반 PostgreSQL에서 'pg_filenode.map' Permission Denied 문제 해결 가이드

등록일: 2025. 6. 10. 4:05


1. 📌 발생하는 증상

Spring Boot 또는 외부 애플리케이션에서 PostgreSQL에 접속하려고 할 때, 다음과 같은 오류 메시지가 발생함:

FATAL: could not open file "global/pg_filenode.map": Permission denied

로그 예시: org.postgresql.util.PSQLException: FATAL: could not open file "global/pg_filenode.map": Permission denied

2. ❗ 발생한 이유

PostgreSQL이 Docker 컨테이너로 실행되고 있으며, 호스트의 디렉토리(/data001/postgres/datadir)를 컨테이너 내부의 /var/lib/postgresql/data로 마운트하고 있음.

하지만 해당 호스트 디렉토리의 파일 소유자가 sleepzz (UID 1000)로 되어 있어서,
컨테이너 내부의 postgres 사용자 (UID 999)가 접근할 수 없음.

이 문제는 다음과 같은 경우에 발생함:

  • 컨테이너 재시작 또는 서버 재부팅 후
  • 호스트 디렉토리를 일반 사용자 권한으로 생성한 경우

3. 🛠 대응법

(1) 파일 권한 확인

ls -l /data001/postgres/datadir/global/pg_filenode.map

결과 예시: -rw------- 1 sleepzz sleepzz 512 ...

→ 소유자가 sleepzz인 경우 문제가 발생함.

(2) UID 999(PostgreSQL 컨테이너 사용자)로 권한 변경

sudo chown -R 999:999 /data001/postgres/datadir
sudo chmod -R 700 /data001/postgres/datadir

(3) PostgreSQL 컨테이너 재시작

docker restart postgres

또는 docker-compose 사용 시:

docker-compose down
docker-compose up -d

4. ✅ 정리

항목내용
증상PostgreSQL 접속 시 Permission Denied
원인호스트 디렉토리의 UID가 컨테이너 내부 postgres UID(999)와 다름
해결chown -R 999:999 및 chmod 700 후 컨테이너 재시작

이 가이드는 Docker 환경에서 PostgreSQL을 안전하게 운영하기 위한 권한 설정 문제를 다루며,
데이터 보존을 유지하면서 문제를 해결할 수 있습니다.