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을 안전하게 운영하기 위한 권한 설정 문제를 다루며,
데이터 보존을 유지하면서 문제를 해결할 수 있습니다.