2014-07-10 3 views
8

मैं exposed पोर्ट 80 के साथ एक कंटेनर चला रहा हूं (चलो इसे old_container पर कॉल करें) -p ध्वज का उपयोग कर पोर्ट 80 पर पोर्ट इंटरफ़ेस पर पोर्ट को बाध्य करें। -p 80:80 मैं आयकर < वर्ष छवि आईडी>डॉकर चेंज पोर्ट बाइंडिंग

मेरी उत्पादन वातावरण में

sudo डोकर रन मैं एक new_container को old_container से अब स्विच करना चाहते हैं। तो मैं old_container को बंद करना चाहता हूं और new_container शुरू करना चाहता हूं।

सबसे पहले मुझे new_container में कुछ मैन्युअल परिवर्तन करना है। तो मैं इसे -p ध्वज के बिना चलाता हूं, क्योंकि मैंने इसे बदलने से पहले पोर्ट 80 पर इसे बाध्य नहीं कर सकता।

sudo docker run -i -t < new-image-id > 
#now I m doing my manual changes 

जब मैं अपने परिवर्तन मैं 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

क्या करें जवाब की तरह नहीं :) प्रश्न खुला छोड़ दें। शायद भविष्य में ऐसा करने का एक तरीका होगा –

उत्तर

0

आपका उपयोग केस अच्छा लगता है, प्रोड पर डॉकर देखना काफी दिलचस्प है। मैन्युअल परिवर्तन क्या है जो आप करने जा रहे हैं? हालांकि, मुझे लगता है आपकी समस्या का हल

1) अटैच किया जा रहा & एक कंटेनर (How do I attach to a running Docker container later?)

docker attach container_name ctrl p ctrl q

2) अलग करने रनिंग डोकर कार्यकारी आदेश हो सकता है

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

उपरोक्त आदेश "old_container" नामक एक कंटेनर बनाएगा

docker exec -d <old_container> mkdir foo

उपरोक्त आदेश चलने वाले कंटेनर के घर फ़ोल्डर पर foo निर्देशिका बना देगा। मुझे लगता है कि आप 'mkdir foo' (मैं इसे कभी नहीं की कोशिश की)

पुनश्च के स्थान पर एक स्क्रिप्ट के रूप में अपने स्वयं परिवर्तन शामिल कर सकते हैं: डोकर कार्यकारी केवल डोकर 1.3 संस्करण

0

मैं एक उपकरण बनाने के लिए किया था से उपलब्ध है के लिए myboot2docker के लिए।

उदाहरण के लिए: दो (2) कंटेनर:

  • डोकर रन -p 11521: 1521 --name = xe1 container1
  • डोकर रन -p 21,521: 1521 --name = XE3 container3

मैं इस आदेश का उपयोग container1 के लिए एक और बंदरगाह-मानचित्रण नहीं बना

p-map xe1 15210:1521 

और उसके बाद मैं अपने वसंत जावा Appl कनेक्ट स्थानीय होस्ट करने के लिए ication: 15210

container3 करने के लिए स्विच करने के लिए सिर्फ इस आदेश

p-map xe3 15210:1521 

नीचे हैं विवरण कार्रवाई में आदेश टाइप करें।

~ $ 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

बार जब आप अपने new_container छवि चलाने के लिए और परिवर्तन की आवश्यकता बनाने के लिए, docker commit का उपयोग कर एक नई छवि के रूप में नए कंटेनर को बचाने। फिर पोर्ट्स को मैप करने के लिए -पी फ्लैग के साथ इस नई छवि को चलाएं।

संबंधित मुद्दे