2014-07-10 4 views
8

exposed 포트 80을 사용하는 컨테이너 (old_container이라고 함)를 실행하고 -p 플래그를 사용하여 포트 80의 호스트 인터페이스에 포트를 바인딩합니다. 내 프로덕션 환경에서 80:80 -i -t < 된 이미지-ID>Docker 변경 포트 바인딩

-p

sudo는 고정 표시기 실행이 나는 new_containerold_container에서 지금 전환하려는. 따라서 old_container을 종료하고 new_container을 시작하고 싶습니다.

먼저 new_container에서 일부 수동 변경을 수행해야합니다. 그래서 나는이 변경을하기 전에 포트 80에 바인드 할 수 없기 때문에 -p 플래그없이 실행합니다.

변경 사항을 완료하면 로그 아웃은 new_container입니다. 내 계획은 이제 old_container을 중지하고 new_container을 포트 80에 바인드했습니다. 그러나 [start][1] 명령은 포트 바인딩 가능성을 제공하지 않습니다.

그럼 내 질문에 와서 : 중지 된 컨테이너에 대한 포트 바인딩을 설정하는 것이 좋습니다. new_container의 커밋 이미지를 만들고 다른 이미지로이 이미지를 실행하는 것이 좋습니다.

+0

당신은 [이 질문] (http://stackoverflow.com/questions/19897743/exposing-a-port-on-a-live-docker-container?rq=1)을보고 싶을 수도 있습니다. – icecrime

+0

Do 답변을 좋아하지 않아 :) 질문을 열어 둡니다. 아마 미래에 이것을 할 방법이있을 것입니다. –

답변

0

유스 케이스가 좋게 들린다. PROD의 도커를 보는 것이 상당히 흥미 롭다. 어떤 수동 변경 작업을 수행 할 예정입니까? 하지만, 나는 당신의 문제에 대한 해결책이

1) 부착 & 고정 표시기 exec 명령을 실행하는 용기 docker attach container_name ctrl p ctrl q

2 (How do I attach to a running Docker container later?)

)를 분리 할 수있는 가정

docker run -it -p 80:80 --name=old_container <old-image-id>

위의 명령은 "old_container"라는 컨테이너를 만듭니다.

docker exec -d <old_container> mkdir foo

위의 명령은 실행중인 컨테이너의 홈 폴더에 foo 디렉토리를 생성합니다. 난 당신이 '에서 mkdir foo는'(나는 그것을 시도하지)

PS 대신에 스크립트로 수동 변경을 포함 할 수 있습니다 같아요 고정 표시기 간부는 내가 도구를 만들했던 고정 표시기 1.3 버전

0

에서 사용할 수 있습니다 myboot2docker에 대해서는 change PORT of Running Container입니다.

예 : 2 개의 컨테이너 :

  • 고정 표시기 실행 -p 11521 : 1521 --name = XE1 container1을
  • 고정 표시기 실행 -p 21521 : 1521 --name = XE3
container3

나는 내 스프링 자바 APPL를 연결

p-map xe1 15210:1521 

다음이 명령을 사용하여 container1을 위해 다른 포트 매핑을 만들 로컬 호스트에 가스화 : 15,210

이 container3로 전환은 세부 조치를 명령

p-map xe3 15210:1521 

은 다음과 같습니다이 명령을 입력합니다. 당신이 당신의 new_container 이미지를 실행하고 필요한 변경을하면

~ $ p-map 
Change port of running container 
Command: p-map <container_name> <host_port:guest_port> 

DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:21521 to:172.17.0.1:1521 
DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:11521 to:172.17.0.2:1521 

~ $ p-map xe1 15210:1521 
Change port of running container 

sudo iptables -t nat -A DOCKER -p tcp --dport 15210 -j DNAT --to-destination 172.17.0.1:1521 

DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:21521 to:172.17.0.1:1521 
DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:11521 to:172.17.0.2:1521 
DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:15210 to:172.17.0.1:1521 -- 

~ $ p-map xe2 15210:1521 
Change port of running container 
Error: No such image or container: xe2 

DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:21521 to:172.17.0.1:1521 
DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:11521 to:172.17.0.2:1521 
DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:15210 to:172.17.0.1:1521 -- 

~ $ p-map xe3 15210:1521 
Change port of running container 

sudo iptables -t nat -D DOCKER -p tcp --dport 15210 -j DNAT --to-destination 172.17.0.1:1521 
sudo iptables -t nat -A DOCKER -p tcp --dport 15210 -j DNAT --to-destination 172.17.0.2:1521 

DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:21521 to:172.17.0.1:1521 
DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:11521 to:172.17.0.2:1521 
DNAT  tcp -- 0.0.0.0/0  0.0.0.0/0  tcp dpt:15210 to:172.17.0.2:1521 -- 
0

docker commit를 사용하여 새로운 이미지로 새로운 컨테이너를 저장합니다. 이 새로운 이미지를 -p 플래그와 함께 실행하여 포트를 매핑하십시오.