- 컨테이너 생성 중, 3306:3306 사용했을 때 오류 내용
(HTTP code 500) server error - Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
말그대로 3306포트는 오직 하나의 소켓만이 사용할 수 있는데 이미 점유중이라는 의미이다.
netstat -ano
gitbash 혹은 cmd(관리자모드)에 들어가 위 명령어를 실행하면 현재 사용중인 포트 번호들을 볼 수 있다.
3306포트는 6036 PID를 가진 프로그램이 점유중이다. 6036은 뭐하는 프로그램일까
작업관리자 → 자세히를 들어가면 현재 실행중인 프로그램들의 PID까지 볼 수 있다.
역시나 기존의 mysql이 사용중이었다. 이것을 해결하기 위해선
- 위 프로그램을 종료하고 실행
- docker에서 다른 포트 할당
두가지가 있는데 위의 방법은 둘 중 하나는 계속 꺼놔야 하니 좋은 방법이 아니다. 사용중인 여러개의 프레임워크들이 얽혀있을탠데 docker로 옮기는 것도 일이다. 그러므로 도커에서는 다른 포트를 할당해줘야겠다. 보통 3306~3308은 잘 사용하지 않으므로 3307을 추천한다.
docker container run -d --name wpdb -v wpdbvol:/var/lib/mysql --restart=always -e MYSQL_ROOT_PASSWORD=<password> -e MYSQL_DATABASE=NAME -p 3307:3306 mysql:latest
이제 정상적으로 컨테이너가 만들어졌다!
로컬 환경의 워크밴치에서 connection을 하나 추가한다.
여기서 3306이 아닌 3307을 입력하고 , 테스트 커넥션을 진행하면 된다.
도커를 사용하면 기본적으로 localhost를 사용할 수 있다.
3307:3306 이란 포트포워딩이라는 것인데, 만약 127.0.0.1:3307 경로로 접속이 들어왔다면 127.0.0.1:3306로 보내주겠다는 의미이다. 컴퓨터통신에서 배운다.
'DevOps > Docker' 카테고리의 다른 글
Docker Container - VScode 연동(컨테이너 내부 파일 VSC에서 편집) (0) | 2024.02.01 |
---|---|
Docker - Image pull, run 명령어 (0) | 2024.01.02 |