docker postgres pgadmin yerel bağlantısı


96

Nginx, php ve postgres ile bir ubuntu imajı oluşturdum.

Mevcut resmimdeki postgres veritabanını pgadminyerel makinemde bulunan ile bağlamak istiyorum .

Yerel pgadmin'imle bağlantı kurmak için imaj ipini kullanmayı denemek için docker inspector kullanmayı denedim, ancak çok başarılı olamadım. Ayrıca, bağlantının çalışması için bazı bağlantı noktalarını yerel olarak yapılandırmayı denedim.


PostgreSQL'in harici bağlantıları dinleyip dinlemediğini (yapılandırma dosyalarınızı kontrol edin) veya bu bağlantı noktasının yerel makineden açık görünüp görünmediğini söylemiyorsunuz.
Richard Huxton

1
Bu soruyu bu kadar az
bilgiyle

Yanıtlar:


91

Bu geçerli bir soru, insanların neden "bu soruyu yanıtlamak mümkün görünmediğini" düşündüklerini bilmiyorum.

Yani, yapmaya çalıştığınız şeyi şu şekilde yapıyorum:

  1. Docker Hub'dan postgres görüntüsünü çekin

    docker pull postgres:latest

  2. Aşağıdaki komutu kullanarak kabı çalıştırın

    docker run -p 5432:5432 postgres

  3. Docker'ın inspect komutunu kullanarak IP'yi bulun

  4. PGADMIN'e bağlanmak için bu IP, PORT, Kullanıcı Adı ve Şifreyi kullanın

  5. Docker postgres konteynerine erişip erişemeyeceğinizi onaylamak için aşağıdaki gibi basit bir telnet de yapabilirsiniz:

    telnet IP_ADDRESS 5432


16
Bağlantı noktasını bununla yayınlıyorsanız, -p 5432:5432konteynerin IP'sini bulmanız gerekmez, ana bilgisayar IP'nizi kullanabilirsiniz 127.0.0.1veya sadecelocalhost
Davos

Gönderinin amacı geçerlidir, ancak SE için yüksek kaliteli bir gönderi değildir. Başlangıç ​​olarak, sorulan gerçek bir 'soru' yok. Ek olarak, işlemi nasıl denediklerine veya bunu yaparken aldıkları hatalara dair hiçbir gösterge yoktur. Bununla birlikte, cevap verme konusunda iyi bir iş çıkardığınızı düşünüyorum.
duct_tape_coder

3
Bu cevap benim için yararlı, bu yüzden geçerli bir soru.
Todd

Konteyneri ana bilgisayarıma eşlemek için -p 5432: 5432 kullandım, ancak yine de bir bağlantı hatası alıyorum. Docker inspect'ten aldığım IPAddress'i kullanmayı denedim ve çalışıyor.
ginad

49

Windows 1.12.6 (9655) için docker çalıştıran Windows 10'da başarılı olduğum adım aşağıdaki gibidir:

  1. En son postaları çekin

    docker pull postgres:latest

  2. postgres kapsayıcıyı çalıştırın:

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

  3. Ardından pgadmin web sitesinden pgAdmin4'ün en son sürümünü yükleyin

  4. PgAdmin 4'ü çalıştırın, yeni sunucu oluşturun ve aşağıdaki Ana Bilgisayar: 127.0.0.1 Bağlantı Noktası: 5432 Kullanıcı adı: kullanıcı şifresi: şifre123

  5. O zaman her şey yolunda, docker postgres örneğine başarıyla bağlanın.

41

Alternatif olarak, Postgres ve Pgadmin'i tek bir docker-composedosyada birleştirebilir ve pgadmin4@pgadmin.orgpwd: kullanıcı olarak oturum açabilirsiniz admin. Posgres sunucusunu eklemek için ana bilgisayar adını postgres, bağlantı noktasını kullanın 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
"Postgres" ana bilgisayar adını şu adrese çeviremedim: nodename veya servname sağlandı veya bilinmiyor ".
Enrique Ortiz Casillas

1
"postgres" ana bilgisayar adını şu adrese çeviremedi: Ad çözümlenmiyor
proxy

1
eğer siz docker network ls, postgres-pgadmin ağı için bir köprü göreceksiniz (benimki postgres_postgres). Ardından, docker network inspect postgres_postgresher biri bir ip / ana bilgisayar adına sahip iki kapsayıcı görebilir ve görebilirsiniz. PGAdmin'den başarılı bir şekilde bağlanmak için Postgres'ten birini (benimki postgres_db_1) alın.
Nil

25

Yaptığım bu

postgres için

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

pgadmin için

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

Pgadmin için bağlantı dizesi

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

İyi çalışıyor!!!!!


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

2
Ayrıca docker'da hem postgres hem de pgAdmin oluşturmak için bu yaklaşımı kullandım. Benim için bir girdi değeri olarak işe yarayan şey, @SolidSnake - stackoverflow.com/a/58224344/4288961 > docker inspect CONTAINER_ID | grep IPAddress. ve bu sonuç IP adresini ana bilgisayar olarak kullandı
Prusdrum

Harika !. Çok yararlı. Sadece 'host.docker.internal' değerine ihtiyacım vardı
Hernán Acosta

19

Benim durumumda, postgre resmimi komutla inceleyerek sorunu çözebilirim

docker inspect CONTAINER_ID  | grep IPAddress.

Bu yüzden, pgadmin 4 bağlantımı yapılandırmak için docker ip adresini kullandım ve her şey yolundaydı. @Afshin Ghazi'ye teşekkürler


Bu benim için çalışıyor.
Kalpesh Tawde

17

PgAdmin'in aynı Ubuntu host / misafir ile çalıştırılması amaçlanıyorsa, postgres konteynerini bağlamanız gerekir, böylece bir adla çözülebilir.

1. Postgres konteyneri çalıştırın:

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

2. pgAdmin kapsayıcısını çalıştırın:

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

3. Şimdi phAdmin web uygulamasına yeni sunucu eklerken, some-postgressunucu adı olarak kullanın

Not --link some-postgresbiz pgAdmin yetiştirme zaman. Bu komut postgres konteynerini pgAdmin konteynerine görünür hale getirir.


1
Sunucuya psq ile bağlanabiliyorum ve pgadmin arayüzünde oturum açıyorum. Ancak postgres sunucusuna pgadmin arayüzünden bağlanırken hangi ağ / bağlantı noktasını kullanmalıyım?
Tom

1
Docker belgelerinden ( 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.not etmeye değer. Ayrıca, --linkpgadmin kapsayıcımın postgres kapsayıcımla konuşmasını sağlamak için kullanma konusunda hiç şansım olmadı . Ancak postalara yerel bir pgadmin kurulumundan erişebilirim.
duct_tape_coder

11

Veritabanını ve pgAdmin'i almak için bunu docker yaml dosyasına ekledim:

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

Postgres kullanıcı adı alphaone ve şifre xxxxxxxxxxx.

docker psKapsayıcı kimliğini almak için bir yapın ve ardındandocker inspect <dockerContainerId> | grep IPAddress

Örneğin: docker inspect 2f50fabe8a87 | grep IPAddress

Ip adresini pgAdmin'e ve docker'da kullanılan veritabanı kimlik bilgilerini girin:

pgAdmin


1
Bu yardımcı oldu. Yukarıda gösterildiği gibi docker PgAdmin portalındaki sunucu yapılandırmasına eklemek için docker Postgres ile ilişkili kapsayıcı içerisinden doğru IP adresini grep etmem gerekiyordu. Putting localhostişe yaramadı.
Andrew Lobban

5

Benim durumumda, bir PostgreSQL kapsayıcım vardı, bu yüzden kapsayıcımı değiştirmedim veya bir docker-compose yaklaşımı oluşturmadım, PostgreSQL'i kurmak için birkaç ay sonra pgadming'e ihtiyacım vardı, bu yüzden benim yaklaşımım bu:

  1. docker inspect my_container_id_postgreSQL
  2. PostgreSQL'e atanan ağ şuydu:

    "Ağlar": {"docker_default": {"IPAdresi": "172.18.0.2", ...}}

  3. PGADMIN'imi --networkkomutla çalıştırdım.

    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 adresini pgAdmin'e ve docker'da kullanılan veritabanı kimlik bilgilerini girin.

Umarım bu birisi için yararlı olabilir. Saygılarımızla.



4

Konteynırdaki postgres bağlantı noktasını yerel sisteminize göstermelisiniz. Bunu, kapsayıcınızı şu şekilde çalıştırarak yaparsınız:

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

GUI istemcinize veya CLI'nize bağlanırken, ip adresiniz localhost ip adresi olsa bile localhost değil ip adresini kullandığınızdan emin olun.

docker ps size postgres konteynırınızın bulunduğu ip adresini verir.


4

PostgreSQL'in çalıştığını doğruladıysanız ve oraya PgAdmin'in yerel kopyası ile bağlanabiliyorsanız ...

Cevap basit: Kullanım host.docker.internalait Istead localhostpgAdmin Docker içinde çalışan için

<code> localhost </code> yerine <code> host.docker.internal </code> kullanın


2

Bunu yapmak için bir Docker köprü ağı da oluşturabilirsiniz.

$ 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

Açık http: // localhost: 8000 /

  1. Yeni Sunucu Ekle'yi tıklayın
  2. Oluştur - Sunucu
    1. İsim: db
    2. Ana bilgisayar adı / adresi: pg
    3. Kullanıcı adı: postgres
    4. Şifre: pg123
  3. Kayıt etmek

Yukarıda kullanılan ana bilgisayar adı / adresi, tarafından verilen Postgres kapsayıcısının adıdır --name pg


Bu, konteyner adını ana bilgisayar adı olarak kullanan benzersiz bir yaklaşımdır. Nginx'i falan kurmakla aynı yaklaşım. Mantıklı.
Sean McCarthy

2

Bu sorunla iki gün karşılaştıktan sonra bu sorunu çözebildim.

Bu sorunun çözümü zaten do inspect gibi insanlar tarafından cevaplandı

docker inspect CONTAINER_ID

ancak bu komutu çalıştırırken, Host Config Config Network Settings vb. gibi çok sayıda günlük aldım, bu yüzden 0.0.0.0'ı denediğim için pgAdmin bağlantısına hangi IPAdresini ekleyeceğimi karıştırdım. ve config, host, networkSettings farklı -2 IPAddress'i günlükler ama nihayet çok denedikten sonra çalışıyor.

hangi IP ile çalışır, bu ağ ip adresini eklemeliyiz ( postgres ve pgAdmin'i bağlamak için oluşturduğumuz ).

benim durumumda olduğu gibi: -

docker postgres_container incelemesi

 "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": "",

bu yüzden NetworkSettings -> Network -> Postgres (mayın oluşturulmuş ağ) -> IPAddress yani "IPAddress": "192.168.16.2" eklemeliyiz.

Bu ipi ekledikten sonra çalışacaktır.

Umarım yardımcı olur.


1

Konteynırınız için doğru ip'i bulmak için aşağıdaki komutları uygulayın:

Kapsayıcı kimliğini kontrol edin:

docker ps

Konteynırınızın doğru IP'sini kontrol etmek için:

docker inspect <ID_CONTAINER> | grep "IPAddress"

PostgreSQL ve PgAdmin'in Docker ile yapılandırılması basittir, doğru değilse, sorununuz daha derinse yapılandırmayı sıfırdan yeniden yapmanızı öneririm.

İşte bu sorunu çözmek için geliştirdiğim bir betik. script-sh / install-docker-postgres-ve-pgadmin


1

MacOS IP'leri için postgresve pgadmin4olanlardan farklıdır docker inspectsağlar. Tür

docker-machine ls

Soldaki sunucunun adına bir göz atın. Bu var defaultvarsayılan olarak.

docker-machine ip defaultIP olacaktır sizin için kullanmak gerekir hem , pgadmin4tarayıcıda ve için postgresde pgadmin4ayarlardan.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.