쑥로그

도커의 2375 포트와 connection refused 본문

프로그래밍

도커의 2375 포트와 connection refused

SOOOOOK 2019. 9. 4. 21:16

bmuschko 플러그인을 사용해서 gradle 파일 안에 도커파일과 빌드를 작성했다.

그리고 remote api url을 쓰게 되었는데

전혀 처음보는 포트에서 connection refused가 떴다.

 

이를 해결하기 위해 접근했던 방식들은,

1. 방화벽 확인

2. 포트 리스닝 확인

 

가 있다. 절대적으로 포트가 닫혀있을 것이라고 생각하고 하루 종일 방화벽 설정만 확인했다.

잘 안쓰는 맥을 쓰게 되어서, 맥에 설정이 되어있을거라고 생각한거다.

그러다가 2375라는 숫자가 이상하게 마음에 걸려서 찾아본 결과, 2375는 도커에서 사용하고 있는 포트였다!!

 

먼저, remote api url은 로컬에 도커가 설치되어있지 않더라도 외부의 도커를 사용할 수 있게 한다.

외부의 도커에 tcp 소켓으로 curl로 remote api url 을 땡기면 그 서버의 도커를 사용할 수 있게 해준다.

 

둘째, 2375 포트는 데몬에 원격 엑세스할 때 사용하는 tcp 포트이다.

(참조. 도커 공홈 https://docs.docker.com/engine/reference/commandline/dockerd/

플러그인 api https://bmuschko.github.io/gradle-docker-plugin/)

 

2375는 암호화되지 않은 포트이고 2376은 암호화되어있다.

이는 설정해주지 않으면 막혀있는 포트인듯 하다. 이를 사용하려면 -H옵션을 도커를 실행할 때 해주어야한다.

 

사실 이 부분은 확실하지 않은게, daemon.json을 만들라느니, 맥인 경우는 앱에서 json에 추가해주라는 솔루션은 먹지 않았다.

 

 

 

대신 docker.service에서 -H tcp://0.0.0.0:2375를 추가해주고 다시 서비스를 restart해주고, systemctl daemon-reload를 실행해주면 된다는 솔루션은 먹지 않았지만 이후 dockerd 를 실행하면 동작은 했다. 해당 터미널을 끄면 다시 리스닝하지 못하지만..

(참조 : https://www.icatpark.com/101)

 

그러다 찾은 해결방법은 2375를 리슨하는 도커를 따로 run 시키는 것이다. 

(참조 : https://stackoverflow.com/questions/19897743/exposing-a-port-on-a-live-docker-container/29281141)

 

-> docker run -p 2375:2375 verb/socat TCP-LISTEN:2375,fork TCP-CONNECT:172.17.0.2:80

 

 

내가 생각하는 가장 좋은 방법은 -H tcp://0.0.0.0:2375를 추가해서 정상 실행해주는 방법이다. 더 좋은 방법은 2376포트를 사용하는 것일거다.