2016-03-10 11 views
12

होस्ट करने के लिए बंदरगाह 5432 को उजागर नहीं कर रहा है, मैं पोस्टग्रेएसक्यूएल सर्वर चलाने के लिए एक डॉकर कंटेनर का उपयोग करने की कोशिश कर रहा हूं, और इसे अपने होस्ट मशीन से कनेक्ट कर रहा हूं।पोस्टग्रेज़ 9.1 के लिए डॉकर कंटेनर

मेरे विन्यास है:

  • होस्ट मशीन: मैक ओएस एक्स 10.10.5
  • डोकर 1.10.1

मैं इस किया है:

चरण 1 : स्थायी पोस्टग्रेस डेटा के लिए वॉल्यूम बनाएं

docker volume create --name postgres_data 

चरण 2: प्रारंभ postgres उदाहरण

अद्यतन: जैसा कि टिप्पणी में सुझाव दिया है, मैं पोर्ट मानचित्रण निर्दिष्ट जब कंटेनर

docker run --name my_postgres_container -e POSTGRES_PASSWORD=my_password -v postgres_data:/var/lib/postgresql/data -p 5432:5432 -d postgres:9.1 

चरण 3 चल: डोकर उदाहरण के लिए कनेक्ट ऐसा करके:

docker run -it --link my_postgres_container:postgres --rm postgres:9.1 sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres' 

Bu मैं उस उदाहरण से कनेक्ट करना चाहता हूं:

psql -h localhost -p 5432 -U postgres 

जैसे कि मैंने अपनी मेजबान मशीन में स्थानीय रूप से पोस्टग्रेर्स इंस्टॉल किए हैं।

समस्या पोर्ट 5432 खुलासा नहीं है। तो, मैं इसके साथ कनेक्ट नहीं कर सकता:

sudo lsof -i -P | grep -i "listen" -> कोई पोर्ट 5432 खुला

अद्यतन 2: यहां तक ​​कि अजनबी। मैंने यह भी किया है:

स्टॉप डॉकर। फिर, मेरी मेजबान मशीन में कोई सामान्य पोस्टग्रेएसक्यूएल 9.4.4 इंस्टेंस चलाएं (यहां कोई डॉकर शामिल नहीं है, बस मेरे मैक ओएस एक्स होस्ट में चल रहे पोस्टग्रेस, पोर्ट 5432 पर सुनना)। सब कुछ सामान्य है:

sudo lsof -i -P | grep -i "postgres" 

postgres 14100   jorge 6u IPv4 0x780274158cebef01  0t0 TCP localhost:5432 (LISTEN) 

मैं बिना किसी समस्या के अपने स्थानीय postgres उदाहरण के साथ जुड़ सकते

psql -h localhost -U postgres -c "select version()" 
                   version 
--------------------------------------------------------------------------------------------------------------------------------------- 
PostgreSQL 9.4.4 on x86_64-apple-darwin14.3.0, compiled by Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn), 64-bit 
(1 row) 

: (आदेश के उत्पादन में देखने के लिए: मैक ओएस एक्स के लिए संकलित postgres, मेरे मेजबान है) अब मज़ा हिस्सा है। मैं फिर से अपना डॉकर इंस्टेंस शुरू करता हूं, जबकि मेजबान PostgreSQL उदाहरण चल रहा है।

यह शुरू होता है! (और यह नहीं होना चाहिए)। मैं भी डोकर रन का उपयोग कर कनेक्ट कर सकते हैं ...

docker run -it --link my_postgres_instance:postgres --rm postgres:9.1 sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres' 

अगर मैं चयन संस्करण() चलाने अब, यह एक ही समय postgres में मेरी डोकर उदाहरण के अंदर चल रहा postgres से पता चलता डोकर से बाहर, मेरे मेजबान में चल रहा है, उसी 5432 पोर्ट का उपयोग कर।(Ouput को देखो, postgres डेबियन, postgres अंदर ओएस के लिए संकलित किया गया है: 9.1 कंटेनर)

postgres=# select version(); 
              version 
------------------------------------------------------------------------------------------------ 
PostgreSQL 9.1.20 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit 
(1 row) 

क्यों?

क्या यह समझ में आता है? मेरा अंतिम लक्ष्य है जो किसी अन्य डॉकर कंटेनर में एक Django ऐप चलाने के लिए है और मेरे पोस्टग्रेस इंस्टेंस से कनेक्ट है। ऐसा कैसे किया जा सकता था?

उत्तर

7

सही पोर्ट मानचित्रण-p <host_port>:<container_port> उपयोग करने के साथ postgre छवि चलाएँ:

docker run --same-options-as-step-one -d -p 5432:5432 postgres:9.1 
+0

धन्यवाद! मैंने उसे किया। लेकिन अभी भी psql का उपयोग कर कनेक्ट नहीं कर सकते हैं। बंदरगाह 5432 का खुलासा नहीं किया जा रहा है, या मुझे नहीं पता कि कैसे कनेक्ट किया जाए। मेरा होस्ट का psql प्रोग्राम ठीक से काम कर रहा है (मैं अन्य होस्ट से कनेक्ट कर सकता हूं, लेकिन मेरे कंटेनर से नहीं) – jorgeas80

+0

'डॉकर पोर्ट <कंटेनर_नाम>' डिस्प्ले क्या करता है? –

+0

इसे '5432/tcp -> 0.0.0.0: 5432' –

6

आपका डोकर मेजबान एक आभासी मशीन है, जो इसे खुद आईपी adddres है है। आप निम्न आदेश दर्ज करके इस आईपी पते का पता लगाने कर सकते हैं:

docker-machine ip 
कुछ

जवाब होगा तरह 192.168.99.100

जब आप -p 5432 का उपयोग कर बंदरगाहों मैप किया गया है: 5432 स्विच, आप उल्लिखित आईपी पते का उपयोग कर अपने देव मशीन से किसी भी उपकरण के साथ पोस्टग्रेस से कनेक्ट करने में सक्षम होंगे।

2

यह 2018 है और मुझे अभी भी एक ही समस्या है। मेरे लिए समाधान डॉकर के प्रोप के क्रम के साथ प्रतीत होता था। जैसे इसके परिणामस्वरूप कोई पोर्ट खुलासा नहीं हुआ;

docker run -d --name posttest postgres:alpine -e POSTGRES_PASSWORD=fred -p 5432:5432

इस जबकि ठीक काम किया (छवि उजागर पोर्ट 5432 की उम्मीद के रूप में);

docker run --name posttest -d -p 5432:5432 -e POSTGRES_PASSWORD=fred postgres:alpine

+0

मेरे लिए तय, धन्यवाद! – PepeHands

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