DevOps/Docker

Docker Compose volume 권한 문제 해결: WSL을 활용한 효과적인 해결 방법

kimc 2024. 1. 18. 00:40
반응형

```

Docker Compose volume 권한 문제 해결: WSL을 활용한 효과적인 해결 방법

```

이번 글을 통해 배워갈 내용

  1. 상황
  2. 해결 방법

상황

새로 세팅한 컴퓨터 도커 컨테이너 환경에

Postgresql을 사용하려고 보니

volume 생성에 문제가 발생했습니다

Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).

 

2024-01-14 15:15:17.597 UTC [83] FATAL:  data directory "/var/lib/postgresql/data" has invalid permissions
2024-01-14T15:15:17.597261337Z 2024-01-14 15:15:17.597 UTC [83] DETAIL:  Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).
2024-01-14T15:15:17.602689641Z child process exited with exit code 1
2024-01-14T15:15:17.602772476Z initdb: removing contents of data directory "/var/lib/postgresql/data"

 

 

먼저 인터넷과 stackoverflow에 나온 대로

제어된 폴더 액세스 설정을 변경하는 방법으로는 진행이 되지 않았습니다 

attrib -r +s "폴더디렉토리"

 

 

리눅스 상에서는

directory 권한이 변경가능하지만

아래의 코드로는 해결되지 않았습니다

sudo cmod 700 /data

 

이건 도커에 문제 같아 보였습니다

그리고 고민 끝에 해결 방법을 찾았습니다


해결방법

Hyper-V 방식 대신에 WSL 설정을 사용해서 해결했습니다

 

 

1단계 - Linux용 Windows 하위 시스템 사용

관리자 권한 cmd 또는 powershell에서

아래와 같은 명령어를 사용합니다 

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

 

  • dism.exe: Windows Deployment Image Service Management Tool로, Windows의 기능을 관리하는 도구입니다.
  • /online: 현재 실행 중인 운영 체제에 대한 작업을 수행한다는 옵션입니다.
  • /enable-feature: 지정된 기능을 활성화한다는 옵션으로, WSL을 활성화하는 역할을 합니다.
  • /featurename:Microsoft-Windows-Subsystem-Linux: 활성화하려는 기능의 이름을 지정하는 옵션으로, 여기서는 Linux용 하위 시스템인 WSL을 지정하고 있습니다.
  • /all: 모든 사용 가능한 기능을 대상으로 작업을 수행한다는 옵션입니다.
  • /norestart: 작업을 완료한 후 시스템을 다시 시작하지 않도록 하는 옵션입니다.


2단계 - WSL 2 실행을 위한 요구 사항 확인

WSL 2로 업데이트하려면 Windows 10 이상에서 실행해야 합니다. 

아래의 버전 및 빌드를 확인하세요.

x64 시스템의 경우: 버전 1903 이상, 빌드 18362.1049 이상.

ARM64 시스템의 경우: 버전 2004 이상, 빌드 19041 이상.

 

3단계 - Virtual Machine 기능 사용

관리자 권한 cmd 또는 powershell에서

아래와 같은 명령어를 사용합니다 

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

 

4단계 - Linux 커널 업데이트 패키지 다운로드

관리자 권한 cmd 또는 powershell에서

아래와 같은 명령어를 사용합니다 

wsl.exe --install
wsl.exe --update

 

5단계 - WSL 2를 기본 버전으로 설정

관리자 권한 cmd 또는 powershell에서

아래와 같은 명령어를 사용합니다 

wsl --set-default-version 2

 

6단계 - Docker Desktop

Docker Desktop에서 다음과 같이 설정합니다

Settings > General > Use the WSL 2 based engine Check 

7단계 - 컴퓨터 재시작

모든 설정이 완료되면 컴퓨터를 재시작하세요.

8단계 - 다시 볼륨과 함께 도커 컴포즈 실행

 

 

 

 


 

읽어주셔서 감사합니다

 

무엇인가 얻어가셨기를 바라며

 

오늘도 즐거운 코딩 하시길 바랍니다 ~ :)

 

참조 및 인용

https://learn.microsoft.com/ko-kr/windows/wsl/install-manual#step-2---check-requirements-for-running-wsl-2

 

이전 버전 WSL의 수동 설치 단계

wsl install 명령을 사용하지 않고 이전 버전의 Windows에 WSL을 수동으로 설치하는 방법에 대한 단계별 지침입니다.

learn.microsoft.com

 

https://stackoverflow.com/questions/74927234/fatal-data-directory-var-lib-postgresql-data-pgdata-has-invalid-permissions

 

FATAL: data directory "/var/lib/postgresql/data/pgdata" has invalid permissions Docker-compose

I faced with problem when create postgres container in the Docker on Windows 10 (on the MacOS is OK) I get error: FATAL: data directory "/var/lib/postgresql/data/pgdata" has invalid

stackoverflow.com


 

 

 


 

 

반응형