Synology NFS 에 docker postgresql 연결하기

ddoachi·2024년 11월 17일

이거가지고 3일은 날린듯

Synology 설정

호스트이름 은 저 NFS 볼륨에 접근할 장치의 ip를 적어줌.
Squash매핑 없음으로 하든, Admin에 모든 사용자 매핑으로 하든 다 됨.

중요한 건 아래 디렉토리의 hierarchy 부분.

docker-compose 설정

services:
  postgres:
    image: postgres:14
    restart: always
    environment:
      POSTGRES_USER: your_id
      POSTGRES_PASSWORD: your_password
      POSTGRES_DB: your_db
      PGDATA: /var/lib/postgresql/data # <- 이부분
    ports:
      - 5432:5432
    volumes:
      - nfs-volume:/var/lib/postgresql  # <- 이부분도!
    tty: true

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

volumes:
 nfs-volume:
   driver: local
   driver_opts:
     type: nfs
     o: "addr=192.168.1.101,nfsvers=4.1,resvport,rw"
     device: :/volume1/docker/export/postgresql
  • NFS에서 지정한 diretory가 /volume1/docker 였고, 그 하위 디렉토리인 /volume1/docker/export/postgres 까지는 생성해놓은 상태.
  • 이걸 volumes항목에서 /var/lib/postgresql 까지 mapping 한 후에, PGDATA/var/lib/postgresql/data 로 설정.
  • 이걸 처음에는 다음과 같이 setting 했더니 권한문제때문에 죽어도 안되더라.
      ... 생략 ...
        # 이렇게 하면 연결이 안 됨.
        PGDATA: /var/lib/postgresql/data/pgdata
    volumes: 
      - nfs-volume:/var/lib/postgresql/data
      ```
  • 권한 문제가 안 풀려서 user: 1025:100 도 해보고, command: chown ~~ 도 해보고 별 생쇼를 해도 안돼서 포기했었는데.
  • resvport 는 없어도 될 것 같은데 해보진 않음. 참고로 이건 docker 에서가 아니라 mac 상에서 NFS 타입의 docker volume 을 생성할 때는 필요했었음.

참고

  • 위의 yaml 파일을 가지고 만든 container를 지울 때 -v 를 꼭 붙이자. 이걸 안붙였더니 yaml 파일의 수정사항이 계속 반영이 안되더라. 몰라서 한참 헤맴
    docker compose -f myfile.yml down -v
  • container를 만들 때에도 --force-recreate 를 넣기.
    docker compose -f myfile.yml up --force-recreate
profile
내일도 풀스택

0개의 댓글