<p>다음과 같이 docker를 사용하여 작성된 mysql docker 컨테이너가 있습니다.</p>
<pre class="brush:php;toolbar:false;">버전: "3.3"
서비스:
DB 서버:
컨테이너_이름: 데이터베이스
이미지: mysql:최신
짓다:
도커파일: ./Dockerfile
환경:
MYSQL_ROOT_PASSWORD: 루트테스트
MYSQL_USER: 소말리아
MYSQL_PASSWORD: 사용자 테스트
포트:
- "3031:3306"
네트워크:
- 내부
볼륨:
- mysql:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
다시 시작: 멈추지 않는 한
네트워크:
내부:
드라이버: 브릿지
볼륨:
mysql:</pre>
<p>올바른 비밀번호로 localhost:3031에 연결했지만 다음 오류가 발생했습니다. </p>
<pre class="lang-bash Prettyprint-override"><code>사용자 'root'@'172.19.0.1'에 대한 액세스가 거부되었습니다(비밀번호 사용: YES).
<p>이 오류를 해결하려면 어떻게 해야 합니까? 동일한 내부 네트워크에 있는 다른 컨테이너도 데이터베이스에 연결할 수 없습니다.
여기에 Dockerfile의 내용을 제공합니다:
<pre class="brush:php;toolbar:false;">init.sql init.sql 추가</pre>
<p>init의 내용을 전달했습니다. SQL은 여기에 있습니다:</p>
<pre class="brush:php;toolbar:false;">리뷰가 없는 경우 데이터베이스를 생성합니다.
사용자가 존재하지 않는 경우 데이터베이스를 생성합니다.
공급업체가 존재하지 않는 경우 데이터베이스를 생성합니다.
리뷰에 대한 모든 권한을 부여합니다.* to 'soumalya'@'%';
사용자*에 대한 모든 권한을 'soumalya'@'%'에 부여합니다.
Vendors.*에 대한 모든 권한을 'soumalya'@'%';</pre>
<p>컨테이너 로그를 보면 데이터베이스가 시작되어 포트 3306에서 들어오는 연결을 기다리고 있는 것을 볼 수 있습니다. </p>
@HansKillan이 말했듯이 데이터베이스가 이미 존재할 때 비밀번호를 변경했는데 변경된 비밀번호는 무시되고 이전 비밀번호를 사용하고 있었습니다. docker exec <container_name>을 사용하여 SQL 명령을 작성하여 사용자 비밀번호를 수동으로 변경해야 했습니다. SQL 명령을 사용하여 사용자 비밀번호를 변경해야 했습니다. 그런 다음 모든 것이 잘되었습니다. 귀하의 경우 데이터베이스에 많은 데이터가 포함되어 있지 않으면 볼륨을 삭제하고 컨테이너를 다시 생성하여 시간을 단축할 수 있습니다