본문 바로가기
개발일지/문제 해결

docker로 mariadb 컨테이너 생성후 외부에서 사용 시 에러 - Could not connect to localhost:3308 : unexpected end of stream, read 0 bytes from 4 (socket was closed by server)

2022. 9. 30.

나는 기존에 windows 에서 mariadb를 3307 포트로 사용하고 있었다.

기존 윈도우에 다운받은 mariadb를 유지한채

docker에서 mariadb를 다운 받았다.

docker pull mariadb;

 

그러면 mariadb 이미지가 추가되었고

그러고 나서

docker run --name mariadb -d -p 3308:3308 --restart=always -e MYSQL_ROOT_PASSWORD=013174 mariadb

명령어로

3308 포트로 mariadb를 실행 시켰다.

그러면 컨테이너가 생성 됐다.

 

그 다음에

msa의 discovery-service(유레카), config, apigateway, order-service를 실행시키고

order-service의 h2-console에서 mariadb 3308포트로 접속하는데

다음과 같은 에러가 발생했다.

java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=localhost)(port=3308)(type=master) : Could not connect to localhost:3308 : unexpected end of stream, read 0 bytes from 4 (socket was closed by server)

 

 

이를 해결 하기 위해 검색해본 결과

도커로 실행한 mariadb에서 다음 명령어로 port를 확인해보면 3306 이었다.

하지만 docker로 실행시킨 mariadb 컨테이너는 3308 포트를 사용하고 있어서

/etc/mysql/my.cnf 파일에 있는 port를 고정으로 3308로 추가해주면 문제가 없으나

이미지 레이어를 이런식으로 수정하는건 바람직하지 않기 때문에

 

포트바인딩을 사용했다.

기존의 컨테이너를 중지 -> 삭제 후

docker run --name mariadb -d -p 3308:3306 --restart=always -e MYSQL_ROOT_PASSWORD=비민번호 mariadb

다음과 같이 포트바인딩해서 컨테이너를 실행하면

스프링 h2 db로 접속이 잘된다.