docker ने pgadmin स्थानीय कनेक्शन को पोस्ट किया


99

मैंने nginx, php और postgres के साथ एक ubuntu छवि बनाई है।

मैं अपनी वर्तमान छवि में पोस्टग्रेज डेटाबेस pgadminको अपने स्थानीय मशीन पर स्थित के साथ जोड़ना चाहता हूं ।

मैं अपने स्थानीय pgadmin के साथ एक संबंध बनाने के लिए छवि आईपी का उपयोग करने की कोशिश करने के लिए docker निरीक्षक का उपयोग करने की कोशिश की है, लेकिन बहुत सफलता के बिना। मैंने कनेक्शन कार्य करने के लिए कुछ पोर्ट को स्थानीय पर कॉन्फ़िगर करने का भी प्रयास किया है।


आप यह नहीं कहते कि क्या PostgreSQL बाहरी कनेक्शन के लिए सुन रहा है (अपनी कॉन्फिग फाइलों की जांच करें) या अगर वह पोर्ट लोकल मशीन से खुलता है।
रिचर्ड हक्सटन

1
यह संभव नहीं लगता कि इस प्रश्न का उत्तर इतनी कम जानकारी के साथ दिया जाए
cthulhu

जवाबों:


91

यह एक वैध प्रश्न है कि लोगों को यह क्यों नहीं लगता कि "उस प्रश्न का उत्तर देना संभव नहीं है"।

तो, यहां बताया गया है कि मैं वह कैसे करता हूं जो आप करने की कोशिश कर रहे हैं:

  1. पुल डॉकटर हब से छवि को पोस्ट करता है

    docker pull postgres:latest

  2. नीचे दिए गए कमांड का उपयोग करके कंटेनर को चलाएं

    docker run -p 5432:5432 postgres

  3. डॉकर्स इंस्पेक्ट कमांड का उपयोग करके आईपी ढूंढें

  4. PGADMIN में कनेक्ट करने के लिए उस IP, PORT, यूजरनेम और पासवर्ड का उपयोग करें

  5. यदि आप डॉकटर कंटेनर को एक्सेस कर सकते हैं, तो पुष्टि करने के लिए आप नीचे जैसा सरल टेलनेट भी कर सकते हैं:

    telnet IP_ADDRESS 5432


16
यदि आप इसके साथ पोर्ट प्रकाशित कर रहे हैं, -p 5432:5432तो आपको कंटेनर के आईपी को खोजने की आवश्यकता नहीं है आप अपने मेजबान आईपी, 127.0.0.1या बस का उपयोग कर सकते हैंlocalhost
दावोस

पद का इरादा मान्य है लेकिन यह एसई के लिए उच्च गुणवत्ता वाला पद नहीं है। शुरू करने के लिए, कोई वास्तविक 'प्रश्न' नहीं है। इसके अतिरिक्त, इस बात के कोई संकेत नहीं हैं कि उन्होंने इसे करते समय किस तरह की प्रक्रिया या त्रुटियों की कोशिश की। उस ने कहा, मुझे लगता है कि आपने जवाब देने का अच्छा काम किया है।
duct_tape_coder

3
यह उत्तर मेरे लिए उपयोगी है, इसलिए यह एक वैध प्रश्न है।
टॉड

मैंने अपने मेजबान में कंटेनर को मैप करने के लिए -p 5432: 5432 का उपयोग किया है, लेकिन अभी भी एक कनेक्शन त्रुटि हो रही है। मैंने IPAddress का उपयोग करने का प्रयास किया जो मुझे docker निरीक्षण से मिला और यह काम करता है।
जिनेद

50

मैंने विंडोज़ १.१२.६ (९ ६५५) के लिए विंडोज़ १० रनिंग डॉकटर पर सफलता प्राप्त की है, यह कदम नीचे की तरह है:

  1. नवीनतम पोस्टग्रेज खींचो

    docker pull postgres:latest

  2. पोस्टगर्न्स समापक चलाएं:

    docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name db-my -p 5432:5432 --restart=always postgres

  3. फिर pgadmin वेबसाइट से pgAdmin4 का नवीनतम संस्करण स्थापित किया

  4. रन pgAdmin 4 होस्ट के रूप में नया सर्वर और इनपुट बनाएँ: 127.0.0.1 पोर्ट: 5432 उपयोगकर्ता नाम: उपयोगकर्ता पासवर्ड: पासवर्ड

  5. फिर सब कुछ ठीक है, docker से कनेक्ट करें इंस्टेंस सफलता को स्थगित कर दें।

45

वैकल्पिक रूप से, आप Postgres और Pgadmin को एक docker-composeफ़ाइल में जोड़ सकते हैं , और उपयोगकर्ता के रूप में लॉगिन कर सकते हैं pgadmin4@pgadmin.org, pwd admin:। Posgres सर्वर को जोड़ने के लिए hostname postgres, port का उपयोग करें 5432

version: '3'
services:
  postgres:
    image: postgres
    hostname: postgres
    ports:
      - "6543:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: TEST_SM
    volumes:
      - postgres-data:/var/lib/postgresql/data
    restart: unless-stopped

  pgadmin:
    image: dpage/pgadmin4
    depends_on:
      - postgres
    ports:
      - "5555:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
      PGADMIN_DEFAULT_PASSWORD: admin
    restart: unless-stopped

volumes:
  postgres-data:

3
मुझे पता है कि होस्ट नाम "पोस्टग्रेज" का अनुवाद पता करने के लिए नहीं किया जा सकता है: नोडनेम और न ही सेवनाम, या ज्ञात नहीं '।
एनरिक ऑर्टिज़ कैसिलस

1
पते पर होस्ट नाम "पोस्टग्रेज" का अनुवाद नहीं किया जा सकता है: नाम हल नहीं होता
प्रॉक्सी

2
यदि आप docker network ls, आपको पोस्टग्रैज-टू-पगडमिन नेटवर्क के लिए एक पुल दिखाई देगा (मेरा है पोस्टग्रैज_पोस्टग्रेज)। फिर, आप docker network inspect postgres_postgresदो कंटेनरों को देख सकते हैं, प्रत्येक एक आईपी / होस्टनाम के साथ। PgAdmin से सफलतापूर्वक कनेक्ट होने के लिए Postgres (मेरा है postgres_db_1) से एक लें।
नील

28

यह जो मैंने किया है

पोस्टग्रेज के लिए

docker run -p 5432:5432  --name container-postgresdb -e POSTGRES_PASSWORD=admin -d postgres

pgadmin के लिए

docker run -p 5050:80  -e "PGADMIN_DEFAULT_EMAIL=name@example.com" -e "PGADMIN_DEFAULT_PASSWORD=admin"  -d dpage/pgadmin4

Pgadmin के लिए कनेक्शन स्ट्रिंग

host: host.docker.internal
database: postgres
user: postgres
password: admin

यह बढ़िया काम करता है!!!!!


5
Unable to connect to server: could not translate host name "host.docker.internal" to address: Try again
duct_tape_coder

2
मैं भी इस दृष्टिकोण का उपयोग करने के लिए दोनों dogr और pgAdmin docker बनाने के लिए। इनपुट मूल्य के रूप में मेरे लिए जो काम किया गया वह @SolidSnake से जवाब था - stackoverflow.com/a/58224344/4288961 > docker निरीक्षण CONTAINER_ID | grep IPAddress। और एक मेजबान के रूप में इस परिणाम आईपी पते का इस्तेमाल किया
Prusdrum

बहुत बढ़िया!। बहुत मददगार। मुझे केवल 'host.docker.internal' मूल्य की आवश्यकता थी
हर्नान एकोस्टा

20

मेरे मामले में मैं कमांड के माध्यम से अपनी पोस्टग्रे छवि का निरीक्षण करने में समस्या को हल कर सकता था

docker inspect CONTAINER_ID  | grep IPAddress.

इसलिए, मैंने अपने pgadmin 4 कनेक्शन को कॉन्फ़िगर करने के लिए docker ip एड्रेस का उपयोग किया और सब कुछ ठीक था। @Afshin गाज़ी को धन्यवाद


17

यदि pgAdmin को उबंटू मेजबान / अतिथि के रूप में wihtin चलाने का इरादा है, तो आपको पोस्टग्रैज कंटेनर को लिंक करने की आवश्यकता है, इसलिए इसे एक नाम से हल किया जा सकता है।

1. एक पोस्टग्रेटर कंटेनर चलाएँ:

docker run --name some-postgres -e POSTGRES_PASSWORD=postgres -d postgres

2. भागो pgAdmin कंटेनर:

docker run -p 80:80 --link some-postgres -e "PGADMIN_DEFAULT_EMAIL=email@domain.com" -e "PGADMIN_DEFAULT_PASSWORD=postgres" -d dpage/pgadmin4

3. अब phAdmin वेब ऐप में नया सर्वर जोड़ते समय, some-postgresसर्वर नाम के रूप में उपयोग करें

ध्यान दें --link some-postgresजब हम pgAdmin ला रहे थे। यह कमांड पोस्टग्रैज कंटेनर को pgAdmin कंटेनर के लिए दृश्यमान बनाता है।


1
मैं psq के साथ सर्वर से कनेक्ट कर सकता हूं, और मुझे pgadmin इंटरफ़ेस में लॉग इन करना है। लेकिन pgadmin इंटरफ़ेस से पोस्टग्रेज सर्वर से कनेक्ट करते समय मैं किस नेटवर्क / पोर्ट का उपयोग करता हूं?
टॉम

1
डॉकर डॉक्स ( docs.docker.com/network/links ) से ध्यान देने योग्य बात Warning: The --link flag is a legacy feature of Docker. It may eventually be removed. Unless you absolutely need to continue using it, we recommend that you use user-defined networks to facilitate communication between two containers instead of using --link.यह भी है कि --linkमेरे पोस्टग्रेज कंटेनर से बात करने के लिए मेरे pgadmin कंटेनर को प्राप्त करने का उपयोग करने के साथ मुझे कोई भाग्य नहीं था । हालाँकि मैं पोस्टग्रैड्स को लोकल इंस्टॉलेशन ऑफ पगडमिन से एक्सेस कर सकता हूं।
duct_tape_coder

13

मैंने डेटाबेस और pgAdmin पाने के लिए docker yaml फ़ाइल में इसे शामिल किया:

database:
    image: postgres:10.4-alpine
    container_name: kafka-nodejs-example-database
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    expose:
      - "5432"
    ports:
      - 8000:5432
    volumes:
      - ./services/database/schema.sql:/docker-entrypoint-initdb.d/1-schema.sql
      - ./services/database/seed.sql:/docker-entrypoint-initdb.d/2-seed.sql
  pgadmin:
    image: dpage/pgadmin4
    ports:
      - 5454:5454/tcp
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin@mydomain.com
      - PGADMIN_DEFAULT_PASSWORD=postgres
      - PGADMIN_LISTEN_PORT=5454

पोस्टग्रेस उपयोगकर्ता नाम अल्फाोन है और पासवर्ड xxxxxxxxxxx है।

docker psकंटेनर आईडी प्राप्त करने के लिए एक करें और फिरdocker inspect <dockerContainerId> | grep IPAddress

उदाहरण के लिए: docker inspect 2f50fabe8a87 | grep IPAddress

PgAdmin में आईपी पते और डॉकटर में उपयोग किए जाने वाले डेटाबेस क्रेडेंशियल्स डालें:

pgAdmin


1
इससे मदद मिली। मुझे डॉक पोस्ट से जुड़े कंटेनर के भीतर से सही IP पता प्राप्त करना था, जैसा कि ऊपर दिखाया गया है। डाल localhostकाम नहीं किया।
एंड्रयू लोबन

6

यदि आपने सत्यापित किया है कि PostgreSQL चल रहा है और आप PgAdmin की स्थानीय प्रति के साथ कनेक्ट कर सकते हैं ...

इसका उत्तर सरल है: डॉकटर के अंदर चल रहे PgAdmin host.docker.internalके localhostलिए istead का उपयोग करें

<code> host.docker.internal </ code> istead of <code> localhost </ code> का उपयोग करें


5

मेरे मामले में, मेरे पास एक PostgreSQL कंटेनर था, इसलिए मैंने अपना कंटेनर नहीं बदला या डॉकटर-कंपोज़ दृष्टिकोण नहीं बनाया, मुझे कुछ महीनों के बाद पोस्टग्रेक्यूएल स्थापित करने की आवश्यकता थी, इसलिए यह मेरा दृष्टिकोण है:

  1. docker inspect my_container_id_postgreSQL
  2. PostgreSQL को सौंपा गया नेटवर्क था:

    "नेटवर्क": {"docker_default": {"IPAddress": "172.18.0.2", ...}}

  3. --networkआदेश के साथ मेरी PGADMIN भाग गया।

    docker run -p 85:80 --network docker_default -e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' -e 'PGADMIN_DEFAULT_PASSWORD-' SuperSecret '-d dpage / pgadmin4

  4. IP पते को pgAdmin में और डेटाबेस क्रेडेंशियल्स को डॉकटर में उपयोग करें।

मुझे उम्मीद है कि यह किसी के लिए उपयोगी हो सकता है। सादर।


5

आदेश में या कंटेनर के अपने आईपी को खोजने के लिए, निम्नलिखित कमांड का उपयोग करें

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

संदर्भ: होस्ट से डॉकर कंटेनर का आईपी पता कैसे प्राप्त करें


4

आपको कंटेनर में पोस्टग्रेज पोर्ट को स्थानीय प्रणाली में उजागर करना होगा। आप अपने कंटेनर को इस तरह चलाकर ऐसा करें:

docker run -p 5432:5432 <name/id of container>

अपने GUI क्लाइंट या CLI के साथ कनेक्ट होने पर सुनिश्चित करें कि भले ही आपका आईपी-पता लोकलहोस्ट आईपी-एड्रेस हो, आईपी-एड्रेस का इस्तेमाल लोकलहोस्ट न करें।

docker ps आपको आईपी पता दे देगा जो आपके पोस्टग्रैज कंटेनर पर है।


4

दो दिनों के लिए इस मुद्दे का सामना करने के बाद मैं उस मुद्दे को हल करने में सक्षम था।

इस समस्या का समाधान पहले से ही लोगों द्वारा जवाब दिया जाता है जैसे कि निरीक्षण करते हैं

docker inspect CONTAINER_ID

लेकिन इस कमांड को चलाने के दौरान मुझे बहुत सारे लॉग जैसे होस्ट कॉन्फिग कॉन्फिगर नेटवर्क सेटिंग्स आदि मिले, इसलिए मैं भ्रमित हो गया कि pAAdmin कनेक्शन में IPAddress को जोड़ना है क्योंकि मैंने 0.0.0.0 और कॉन्फ़िगर की कोशिश की , होस्ट, नेटवर्कसेटिंग अलग -2 IPAress लॉग करता है लेकिन अंत में यह बहुत कोशिश करने के बाद काम करता है।

यह किस IP के साथ काम करता है, हमें उस नेटवर्क आईपी एड्रेस को जोड़ना होगा (जो हमने पोस्टग्रैज और pgAdmin को जोड़ने के लिए बनाया है ।)

मेरे मामले में जब मैं चला:

docker postgres_container का निरीक्षण करें

 "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "sdffsffsfsfsfsf123232e2r3pru3ouoyoyuosyvo8769696796",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {
            "5432/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "5432"
                }
            ]
        },
        "SandboxKey": "/var/run/docker/231231Ad132",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "EndpointID": "",
        "Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "",
        "IPPrefixLen": 0,
        "IPv6Gateway": "",
        "MacAddress": "",
        "Networks": {
            "postgres": {
                "IPAMConfig": null,
                "Links": null,
                "Aliases": [
                    "postgres",
                    "0e2j3bn2m42"
                ],
                "NetworkID": "35rhlhl3l53l5hlh3523233k3k4k22l3hk2k4",
                "EndpointID":"b3424n43k52o2i4n235k1k4l2l4hj234f14n2",
                "Gateway": "192.168.16.1",
                "IPAddress": "192.168.16.2",
                "IPPrefixLen": 20,
                "IPv6Gateway": "",

इसलिए हमें NetworkSettings -> Network -> Postgres (मेरा बनाया नेटवर्क) -> IPAddress अर्थात "IPAddress": "192.168.16.2" को जोड़ना होगा।

इस आईपी को जोड़ने के बाद यह काम करेगा।

मुझे उम्मीद है इससे मदद मिलेगी।


2

ऐसा करने के लिए आप एक डॉक ब्रिज नेटवर्क बना सकते हैं।

$ docker network create pgnet
a0ae44aaf6f806fc37302e4c603b4828c4edb8d487fd9cd90e2fb19ae1d5c65f

$ docker run --detach \
    --name pg \
    --network pgnet \
    --publish 5432:5432 \
    --restart always \
    --env POSTGRES_PASSWORD=pg123 \
    --volume ${PWD}/data:/var/lib/postgresql/data \
    postgres:12.1
b60611e43727dabe483c1f08fdf74961b886ce05b432a10a0625bd1b6db87899

$ docker run --detach \
    --name pgadm \
    --network pgnet \
    --publish 8000:80 \
    --volume ${PWD}/pgadmin:/var/lib/pgadmin \
    --env PGADMIN_DEFAULT_EMAIL=user@domain.com \
    --env PGADMIN_DEFAULT_PASSWORD=pgadm123 \
    dpage/pgadmin4:4.20
27f9ce1c1c4c383ee1507f4e2d88f6ef33d4fcf5b209a8a03b87519f90d56312

ओपन http: // लोकलहोस्ट: 8000 /

  1. नया सर्वर जोड़ें पर क्लिक करें
  2. बनाएँ - सर्वर
    1. नाम: डी.बी.
    2. होस्टनाम / पता: पीजी
    3. उपयोगकर्ता नाम: पोस्टग्रेज
    4. पासवर्ड: pg123
  3. सहेजें

ऊपर दिया गया होस्टनाम / पता पोस्टग्रेज कंटेनर का नाम है --name pg


होस्टनाम के रूप में कंटेनर नाम का उपयोग करके यह एक अनूठा तरीका है। Nginx या कुछ और स्थापित करने के रूप में एक ही दृष्टिकोण। समझ में आता है।
सीन मैकार्थी

1

अपने कंटेनर के लिए सही आईपी खोजने के लिए, निम्नलिखित कमांड निष्पादित करें:

कंटेनर आईडी जांचें:

docker ps

अपने कंटेनर के सही आईपी की जांच करने के लिए:

docker inspect <ID_CONTAINER> | grep "IPAddress"

Docker के साथ PostgreSQL और PgAdmin दोनों का कॉन्फ़िगरेशन सरल है, अगर सही नहीं है, तो मैं आपकी समस्या को गहरा होने पर, कॉन्फ़िगरेशन को खरोंच से फिर से करने की सलाह देता हूं।

यहाँ एक स्क्रिप्ट है जिसे मैंने इस समस्या को हल करने के लिए विकसित किया है। पटकथा श / स्थापित-डोकर-postgres और pgAdmin


1

MacOS के लिए IP postgresऔर प्रदान pgadmin4करने वाले से अलग हैं docker inspect। प्रकार

docker-machine ls

बाईं ओर सर्वर के नाम पर एक नज़र डालें। यह defaultडिफ़ॉल्ट रूप से है।

docker-machine ip defaultIP जाएगा आप के लिए उपयोग करने की आवश्यकता दोनों , pgadmin4ब्राउज़र में और के लिए postgresमें pgadmin4सेटिंग्स।


0

मैंने जिस समाधान की कोशिश की और मेरे लिए काम किया, वह था एक डॉक्यू कम्पोज़ फाइल बनाना जहाँ मैंने पोस्टग्रेजुएशन और पगडमिन को सेवाओं के रूप में शामिल किया। अधिक जानकारी के लिए: dogad में पोस्टग्रेज करने के लिए pgadmin को कनेक्ट करना

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.