1. 배경
이전에는 docker를 설치하고 MySQL 컨테이너를 실행하기도 했고, navicat을 이용하여 docker에서 MySQL에 접속해서 데이터베이스를 생성하기도 했는데요, 한동안 Windows를 사용하지 않고 MacOS로 전환했다가 다시 Windows 컴퓨터로 돌아와서 navicat을 발견했습니다. 데이터베이스를 연결할 수 없습니다. 오류 스크린샷은 다음과 같습니다.
(문제가 해결되었기 때문에 오류 사진을 찾을 수 없습니다. 이 사진은 오류를 재현하기 위해 다른 사람의 사진을 복사한 것입니다
.)
2. 나는 무엇을 시도했는가?
- 나는 다음을 사용하여 컨테이너에 들어갑니다.mysql -uroot -pMySQL에 로그인하는 것은 가능하지만 Docker MySQL에 대한 외부 연결을 사용하는 것은 가능하지 않은 것으로 확인되어 문제 자체는 컨테이너 내부에 있지 않은 것으로 추측됩니다.
- 인터넷에서 Baidu가 제공하는 대부분의 솔루션은 콘솔을 사용하여 MySQL에 로그인하고 루트 사용자가 %(모든 IP 연결이 허용됨)인지 확인한 다음 어떤 권한을 구성하고 비밀번호를 변경하고 권한을 새로 고치는 것입니다. , 가능성이 매우 낮다는 것을 알지만, 문제를 해결하기 위해 다시 시도했지만 최종 결과는 실제로 해결되지 않았습니다.
- 그러다가 인터넷에서 도커 머신의 IP를 확인하려고 했다는 것을 보고(내 윈도우가 리눅스를 시뮬레이트했기 때문에 WLS라던가 뭐라 부르던 것 같더니 도커 데스크톱에 제공해서 사용하게 됐다) 이렇게 입력했다. Linux 기계는 ifconfig를 통해 자신의 IP를 확인하고 navicat에 이 IP로 IP 주소를 입력하려고 시도하지만 여전히 작동하지 않습니다! 이때쯤엔 이미 더러운 말이 가득했지~
- 나중에 믿기지 않아서 포트 매핑을 다시 확인해 보니 과연 외부 3306에 매핑된 3306이더군요. 더 이상 믿을 수가 없었습니다. 원래 MySQL 컨테이너를 닫고 다시 실행하면 안 될까요? 능숙하게 사용했습니다. 명령 세트(마운트 디렉토리 무시):
docker run -p 3306:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
이때 가보니 컨테이너가 실행이 안되는걸 발견하고 깜짝 놀랐습니다~
오류 메시지는 대략 다음과 같았습니다.
포트를 사용할 수 없습니다. 포트 노출 TCP 0.0.0.0:xxxxx -> 0.0.0.0:0: Listen tcp 0.0.0.0:xxxxx: 바인딩: 액세스 권한에 의해 금지된 방식으로
소켓에 액세스하려는 시도가 있었습니다 .
그런 다음 다시 돌아가 원래 닫혀 있던 컨테이너를 시작하려고 시도했지만 시작할 수 없다는 것을 발견했습니다. 좋습니다. Baidu가 이런 실수를 했습니다.
3. 해결
위에 표시된 포트를 사용할 수 없는 이유를 바탕으로 검색 엔진에서 찾은 솔루션은 다음과 같습니다.
winnat 다시 시작
- 단계:
- PowerShell을 관리자로 실행
- 그만해
net stop winnat
- winnat 시작
net start winnat
그런 다음 다시 컨테이너를 실행했는데 컨테이너가 살아 있었습니다!
navicat에서 my MySQL에 접속해 와~ 잘 되네
새로 생성된 컨테이너를 삭제하고 하루 만에 끝내자!