소개
Docker에서 MySQL 데이터베이스에 액세스하려는 시도 컨테이너는 루트 비밀번호가 설정된 경우에도 액세스 거부 오류를 생성할 수 있습니다. MYSQL_ROOT_PASSWORD 환경 변수입니다. 이 문제는 기존 데이터베이스 데이터가 초기화에 미치는 영향을 오해하여 발생할 수 있습니다.
문제
컨테이너 초기화 중에 볼륨이 데이터베이스에 매핑된 경우 데이터 디렉터리(이 경우 db_data)에는 이미 데이터베이스 파일 시스템이 포함되어 있으며, 컨테이너는 기존 데이터베이스를 존중하고 다음을 포함하여 초기화와 관련된 모든 환경 변수를 무시합니다. MYSQL_ROOT_PASSWORD. 결과적으로 구성된 자격 증명을 사용하여 데이터베이스에 액세스하려는 시도는 실패합니다.
해결책
이 문제를 해결하려면 사전 인증 없이 컨테이너를 시작해야 합니다. 기존 데이터베이스 볼륨. 다음 명령을 사용하여 데이터 볼륨을 삭제하면 됩니다.
docker-compose down -v
그런 다음 docker-compose up -d 명령을 사용하여 컨테이너를 다시 불러옵니다. 이 프로세스는 기존 데이터베이스 내용을 지우고 MYSQL_ROOT_PASSWORD에 저장된 지정된 루트 비밀번호로 새 데이터베이스를 초기화합니다.
참고: 위 명령을 사용하면 기존 데이터가 영구적으로 삭제되므로 주의하세요. db_data 볼륨. 이 데이터를 보존하려면 이 명령을 실행하기 전에 백업을 만드십시오.
바인드 마운트의 대안
바인드 마운트를 사용하는 경우 탐색하여 해당 내용을 수동으로 제거하십시오. 바인드 마운트 경로에 추가하고 다음을 실행합니다.
rm -rf /path/to/bind/mount/*
기타 관련 정보
이 접근 방식은 MySQL 도커 이미지에 적용됩니다. 그러나 PostgreSQL 및 MongoDB용 이미지를 포함한 다른 공식 데이터베이스 Docker 이미지는 유사한 초기화 프로세스를 따르며 기존 데이터 볼륨을 사용할 때 비슷한 문제가 발생할 수 있다는 점은 주목할 가치가 있습니다.
위 내용은 MYSQL_ROOT_PASSWORD 설정에도 불구하고 내 Docker MySQL 컨테이너가 액세스를 거부하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!