cannot open directory '/docker-entrypoint-initdb.d/': permission denied
by AMAD에러와 오류에 지친 여러분께 심심한 위로의 뜻을 전합니다.
아울러 해당 포스팅은 개발실력 향상을 위한 학습형 포스팅과는 성격이 다르다는 점 밝힙니다. 원인과 결과, 해당 오류의 해결을 위한 짤막한 글로 구성되어 있다는 것을 알려드리며, 모쪼록 이 페이지가 여러분의 마지막 검색이 되길 기원합니다.
에러문구
cannot open directory '/docker-entrypoint-initdb.d/': Permission denied
요약: docker 이미지로 mysql 컨테이너 실행 시 실행 될 init 스크립트를 읽지 못하는 상황 (권한 문제인 것으로 보임)
시도1 - 도커 파일 수정
구글링 후 스택오버플로 등의 검색결과를 바탕으로 컨테이너 생성 후 몇가지 권한 부여하는 명령어 추가
(유저를 mysql로 바꾼후 chmod로 권한 부여 하는 명령어)
But, 동일 에러 발생
시도2 - init디렉토리에 권한 부여
마운트 시킬 docker-entrypoint-initdb.d 에만 권한을 부여 하면 될 것이라고 생각했으나 스크립트를 가지고 있는 init 디렉토리에도 권한이 부여되어있어야 마운트 가능
init 디렉토리에 권한 준 후 캐쉬없이 빌드 후 실행 (스크립트 수정 및 권한 부여등을 한 후에 재빌드시에는 캐쉬없이 재빌드 하거나 캐쉬 삭제 후 재빌드 할 것!)
mysql 컨테이너 정상 작동! (status up!)
위에 권한을 부여한 init 디렉토리는 init.sql 파일이 닮겨있는 디렉토리로 아래 이미지의 디렉토리를 말한다.
도커 컨테이너 상에 존재하는 디렉토리가 아니다!
부연 설명 위해 compose 파일을 첨부한다.
위 이미지의 밑줄 친 부분을 보면 볼륨 마운트 과정중에서 해당 에러가 발생한 것을 알 수 있다.
mysql 컨테이너 실행 시 초기에 생성할 DDL을 담은 스크립트 파일을 도커 컨테이너 내부의 /docker-entrypoint-initdb.d/ 에 마운트 시킨다는 의미이다. (이렇게 마운트 하면 컨테이너 생성 시 스크립트에 저장된 DDL이 실행된다.)
'에러 해결' 카테고리의 다른 글
could not resolve type alias (0) | 2023.04.28 |
---|---|
cannot invoke because is null (0) | 2023.04.28 |
There is no getter for property named 'sql' (0) | 2023.01.15 |
ManyRelatedManager object has no attribute (0) | 2023.01.13 |
nested exception is : Parameter not found (0) | 2023.01.08 |
블로그의 정보
성장 하고 싶은 개발자
AMAD