होस्ट करने के लिए बंदरगाह 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 ऐप चलाने के लिए है और मेरे पोस्टग्रेस इंस्टेंस से कनेक्ट है। ऐसा कैसे किया जा सकता था?
धन्यवाद! मैंने उसे किया। लेकिन अभी भी psql का उपयोग कर कनेक्ट नहीं कर सकते हैं। बंदरगाह 5432 का खुलासा नहीं किया जा रहा है, या मुझे नहीं पता कि कैसे कनेक्ट किया जाए। मेरा होस्ट का psql प्रोग्राम ठीक से काम कर रहा है (मैं अन्य होस्ट से कनेक्ट कर सकता हूं, लेकिन मेरे कंटेनर से नहीं) – jorgeas80
'डॉकर पोर्ट <कंटेनर_नाम>' डिस्प्ले क्या करता है? –
इसे '5432/tcp -> 0.0.0.0: 5432' –