Ubuntu 22.04에서 Docker로 PostgreSQL 실행 시 발생하는 `pg_notify` 오류 해결하기

찬민·2024년 9월 30일

TIL

목록 보기
61/62

Ubuntu 22.04에서 Docker로 PostgreSQL 컨테이너 실행 시 발생하는 pg_notify 오류 해결하기**

Ubuntu 22.04에서 Docker를 사용해 PostgreSQL 컨테이너를 실행할 때 발생할 수 있는 "pg_notify 디렉터리를 열 수 없습니다" 오류를 해결하는 방법에 대해 알아보겠다.

문제 설명

Ubuntu 22.04 환경에서 Docker로 PostgreSQL 컨테이너를 실행하려고 할 때, 다음과 같은 오류 메시지가 발생했다:

postgres_db  | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres_db  | 2024-09-30 11:16:21.613 UTC [1] FATAL:  could not open directory "pg_notify": No such file or directory
postgres_db  | 2024-09-30 11:16:21.614 UTC [1] LOG:  database system is shut down

이 오류는 PostgreSQL이 데이터베이스 디렉터리 안의 특정 디렉터리(pg_notify)를 찾지 못했기 때문에 발생한다. 이 오류는 주로 볼륨 설정 문제나 PostgreSQL 데이터 디렉터리가 손상되었거나, 불완전하게 생성된 경우에 발생한다.

오류 원인 분석

이 오류는 보통 다음과 같은 이유로 발생할 수 있다:

  1. 손상된 데이터 디렉터리: 이전에 사용한 데이터 디렉터리가 손상되었거나 잘못된 설정이 있는 경우.
  2. 볼륨 권한 문제: Docker가 데이터베이스 데이터가 저장되는 볼륨에 대해 적절한 권한을 가지지 못한 경우.
  3. 불완전한 초기화: 초기화가 완료되지 않았거나, PostgreSQL 컨테이너가 비정상 종료되어 데이터 디렉터리가 불완전하게 남아 있는 경우.

해결 방법

1. PostgreSQL 데이터 볼륨 삭제 및 재생성

가장 간단한 방법은 데이터 디렉터리를 초기화하고 새로운 데이터 볼륨을 만드는 것이다. Docker에서는 볼륨을 삭제하고 새로 만들 수 있다.

  1. 컨테이너 중지 및 볼륨 삭제:
    PostgreSQL 데이터를 담고 있는 Docker 볼륨을 삭제하려면 다음 명령어를 실행한다.

    docker-compose down
    sudo rm -rf ./data/postgres  # 데이터 볼륨 경로를 삭제

    이 명령어는 기존의 데이터 디렉터리를 완전히 삭제하여 PostgreSQL이 새로운 데이터 디렉터리를 생성하도록 한다.

  2. 다시 컨테이너 시작:
    이제 다시 컨테이너를 실행하여 PostgreSQL 데이터 디렉터리를 새로 생성한다.

    docker-compose up --build

    이렇게 하면 새로운 볼륨이 생성되면서 PostgreSQL이 제대로 초기화될 것이다.

2. 권한 문제 해결

볼륨 디렉터리에 대한 접근 권한이 부족한 경우에도 이와 같은 오류가 발생할 수 있다. Docker가 볼륨 경로에 정상적으로 접근할 수 있도록 디렉터리 권한을 설정해야 한다.

  1. 볼륨 디렉터리 권한 설정:
    PostgreSQL이 데이터를 저장하는 디렉터리에 충분한 권한이 있는지 확인한다. 데이터 디렉터리의 경로는 일반적으로 docker-compose.yml 파일에 설정되어 있다 (./data/postgres 등).

    sudo chmod -R 777 ./data/postgres

    이 명령어를 통해 Docker가 데이터 볼륨에 대해 읽기 및 쓰기 권한을 가지도록 할 수 있다.

0개의 댓글