찾다

 >  Q&A  >  본문

localhost에서 docker 네트워크에서 실행 중인 docker 컨테이너에 연결하는 방법

<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>
P粉418854048P粉418854048488일 전521

모든 응답(1)나는 대답할 것이다

  • P粉803527801

    P粉8035278012023-07-26 10:43:28

    @HansKillan이 말했듯이 데이터베이스가 이미 존재할 때 비밀번호를 변경했는데 변경된 비밀번호는 무시되고 이전 비밀번호를 사용하고 있었습니다. docker exec <container_name>을 사용하여 SQL 명령을 작성하여 사용자 비밀번호를 수동으로 변경해야 했습니다. SQL 명령을 사용하여 사용자 비밀번호를 변경해야 했습니다. 그런 다음 모든 것이 잘되었습니다. 귀하의 경우 데이터베이스에 많은 데이터가 포함되어 있지 않으면 볼륨을 삭제하고 컨테이너를 다시 생성하여 시간을 단축할 수 있습니다

    회신하다
    0
  • 취소회신하다