본문 바로가기

[DevOps]/[Docker]

[Docker] 이미 실행한 컨테이너 포트포워딩 재설정하기

728x90

[ jenkins...bye.. ]

빌드 많이도 했다...

프로젝트가 거의 끝물에 이르면서, 벡엔드 서버는 정리+마무리 단계다. jenkins를 도커 컨테이너로 만들어서 쓰면 기본포트가 8080인데, 포트번호를 바꿔줄수 있냐는 팀원 요청이 있었다. 해본적이 없어서 간단한 방법을 찾았는데 유용할 것 같아 기록으로 남긴다.


Wrong solution !! -> 먼저 시도한 방법은 ..... 커밋하고, 포트포워딩 바꿔서 다시 실행! (예상은 했지만 역시 실패... )

docker stop jenkins-container-name
docker commit jenkins-container-name jenkins-image-name
docker run -p 8081:8080 -d jenkins-image-name

그리고 다시 접속해보면.... 첨부터 다시 해야한다... (으;;) 이건 처음부터 이미지를 실행시키는 방법이지, 이미 돌아가는 컨테이너의 포워드된 포트 번호를 변경하는 방법이 아니다! 스택오버플로우에 보면 vote 수가 많던데 나도 이해가 안된다;;;;

 

 

[ This is Right solution : 아래 StackOverflow 링크의 두번째 답변!! ]

 

How do I assign a port mapping to an existing Docker container?

I'm not sure if I've misunderstood something here, but it seems like it's only possible to set port mappings by creating a new container from an image. Is there a way to assign a port mapping to an

stackoverflow.com

이거 변경하는 거 좀 귀찮을 수 있음...

Solution. 이 방법 외에도 네트워크를 따로 만들어주는 방법도 있는 것 같다!

  1. Stop the container (docker stop <container_name>)
    docker stop $(docker ps -a -q)​
     
  2. Stop docker service (per Tacsiazuma's comment)
    sudo systemctl stop docker​
  3. Change the file -> config.v2.json 에서는 컨테이너 내부에서 외부로 공개되는 포트를 추가,수정할 수 있다. 여기서는 hostconfig.json 을 사용한다. 
    중간에 보이는 저 해쉬값은 컨테이너 설정파일에 대한 폴더의 이름이다. 당연히 컨테이너마다 다르다. 시작부분이 컨테이너 ID와 일치하므로 원하는 컨테이너 ID의 앞부분을 기억해뒀다가 찾아 들어가면 된다.
    nano /var/lib/docker/containers/a7c53d0d298d5b7a30a481dfcaa68a51ccba996fccb2be5fb808c3763f810915/hostconfig.json
    > portbinding 찾아서 포트번호 변경​
  4. Restart your docker engine (to flush/clear config caches).
    sudo systemctl start docker​
  5. Start the container (docker start <container_name>)
    docker restart $(docker ps -a -q)​

모두 완료하고 나면... 포트번호가 8081로 변경!!!

 

그리고 실패했던 jenkins url로 접속해보니... 이렇게 기존의 내용이 날라가지 않은 상태로 포트가 무사히 변경된 것을 확인할 수 있었다!!

빌드 볼때마다 뿌듯한 이 마음..

 

- 성공 ! -

728x90