koneksi lokal docker postgres pgadmin


96

Saya telah membuat image ubuntu dengan nginx, php dan postgres.

Saya ingin menghubungkan database postgres di gambar saya saat ini dengan pgadminterletak di mesin lokal saya.

Saya telah mencoba menggunakan inspektur buruh pelabuhan untuk mencoba menggunakan gambar ip untuk membuat koneksi dengan pgadmin lokal saya tetapi tidak berhasil. Saya juga mencoba mengonfigurasi beberapa port di lokal agar koneksi berfungsi.


Anda tidak mengatakan apakah PostgreSQL mendengarkan koneksi eksternal (periksa file konfigurasi Anda) atau jika port tersebut terbuka dari mesin lokal.
Richard Huxton

1
Tampaknya tidak mungkin untuk menjawab pertanyaan itu dengan sedikit info yang diberikan
cthulhu

Jawaban:


91

Ini adalah pertanyaan yang valid, tidak tahu mengapa orang merasa "sepertinya tidak mungkin untuk menjawab pertanyaan itu".

Jadi, inilah cara saya melakukan apa yang Anda coba lakukan:

  1. Tarik gambar postgres dari Docker Hub

    docker pull postgres:latest

  2. Jalankan penampung menggunakan perintah di bawah ini

    docker run -p 5432:5432 postgres

  3. Menggunakan perintah inspeksi buruh pelabuhan menemukan IP

  4. Gunakan IP, PORT, Username, dan Password tersebut untuk terhubung di PGADMIN

  5. Anda juga dapat melakukan telnet sederhana seperti di bawah ini untuk mengonfirmasi apakah Anda dapat mengakses container postgres docker:

    telnet IP_ADDRESS 5432


16
Jika Anda menerbitkan port dengan ini -p 5432:5432maka Anda tidak perlu menemukan IP penampung, Anda dapat menggunakan IP host Anda, atau 127.0.0.1atau hanyalocalhost
Davos

Maksud postingan ini valid tetapi bukan postingan berkualitas tinggi untuk SE. Untuk memulai, sebenarnya tidak ada 'pertanyaan' yang diajukan. Selain itu, tidak ada indikasi bagaimana mereka mencoba proses atau kesalahan yang mereka terima saat melakukannya. Yang mengatakan, saya pikir Anda telah melakukan pekerjaan yang baik dalam menanggapi.
duct_tape_coder

3
Jawaban ini berguna bagi saya, oleh karena itu ini pertanyaan yang valid.
Todd

Saya telah menggunakan -p 5432: 5432 untuk memetakan kontainer ke host saya tetapi masih mendapatkan kesalahan koneksi. Saya mencoba menggunakan IPAddress yang saya dapatkan dari inspeksi buruh pelabuhan dan berhasil.
ginad

49

Apa yang telah saya lakukan berhasil pada windows 10 yang menjalankan buruh pelabuhan untuk windows 1.12.6 (9655), langkahnya seperti di bawah ini:

  1. Tarik postgres terbaru

    docker pull postgres:latest

  2. jalankan penampung postgres:

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

  3. Kemudian instal versi terbaru pgAdmin4 dari situs web pgadmin

  4. Jalankan pgAdmin 4 buat server baru, dan masukan sebagai berikut Host: 127.0.0.1 Port: 5432 Nama pengguna: kata sandi pengguna: kata sandi123

  5. Kemudian semuanya baik-baik saja, sambungkan ke instance docker postgres sukses.

41

Atau, Anda bisa menggabungkan Postgres dan pgAdmin dalam satu docker-composefile, dan login sebagai pengguna pgadmin4@pgadmin.org, pwd: admin. Untuk menambahkan server Posgres, gunakan nama host 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
Saya mendapatkan 'tidak bisa menerjemahkan nama host "postgres" ke alamat: nodename atau servname disediakan, atau tidak diketahui'.
Enrique Ortiz Casillas

1
tidak dapat menerjemahkan nama host "postgres" ke alamat: Nama tidak diselesaikan
proxy

1
jika Anda docker network ls, Anda akan melihat jembatan untuk jaringan postgres-ke-pgadmin (milik saya adalah postgres_postgres). Kemudian, Anda dapat docker network inspect postgres_postgresdan melihat dua kontainer, masing-masing dengan ip / hostname. Ambil yang dari Postgres (milik saya adalah postgres_db_1) agar berhasil terhubung dari pgAdmin.
Nihil

25

Inilah yang saya lakukan

untuk postgres

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

untuk pgadmin

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

String koneksi untuk pgadmin

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

Ini bekerja dengan baik !!!!!


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

2
Saya juga menggunakan pendekatan ini untuk membuat postgres dan pgAdmin di buruh pelabuhan. Apa yang berhasil bagi saya sebagai nilai masukan adalah jawaban dari @SolidSnake - stackoverflow.com/a/58224344/4288961 > buruh pelabuhan periksa CONTAINER_ID | grep IPAddress. dan menggunakan hasil ini alamat IP sebagai tuan rumah
Prusdrum

Luar biasa !. Sangat membantu. Saya hanya membutuhkan nilai 'host.docker.internal'
Hernán Acosta

19

Dalam kasus saya, saya bisa menyelesaikan masalah memeriksa gambar postgre saya melalui perintah

docker inspect CONTAINER_ID  | grep IPAddress.

Jadi, saya menggunakan alamat ip buruh pelabuhan untuk mengkonfigurasi koneksi pgadmin 4 saya dan semuanya baik-baik saja. Terima kasih kepada @Afshin Ghazi


Ini berhasil untuk saya.
Kalpesh Tawde

17

Jika pgAdmin dimaksudkan untuk dijalankan dengan host / tamu Ubuntu yang sama, maka Anda perlu menautkan kontainer postgres, sehingga dapat diselesaikan dengan sebuah nama.

1. Jalankan wadah postgres:

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

2. Jalankan container 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. Sekarang saat menambahkan server baru di aplikasi web phAdmin, gunakan some-postgressebagai nama server

Perhatikan --link some-postgressaat kami membuka pgAdmin. Perintah ini membuat penampung postgres terlihat oleh penampung pgAdmin.


1
Saya dapat terhubung dengan psq ke server, dan saya masuk ke antarmuka pgadmin. Tetapi jaringan / port apa yang saya gunakan saat menghubungkan ke server postgres dari antarmuka pgadmin?
Tom

1
Perlu diperhatikan dari dokumen Docker ( 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.Saya juga tidak beruntung menggunakan --linkcontainer pgadmin saya untuk berbicara dengan container postgres saya. Saya dapat mengakses postgres dari instalasi lokal pgadmin.
duct_tape_coder

11

Saya menyertakan ini di file docker yaml untuk mendapatkan database dan pgAdmin:

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

Nama pengguna postgres adalah alphaone dan kata sandinya adalah xxxxxxxxxxx.

Lakukan a docker psuntuk mendapatkan id penampung laludocker inspect <dockerContainerId> | grep IPAddress

misalnya: docker inspect 2f50fabe8a87 | grep IPAddress

Masukkan alamat Ip ke pgAdmin dan kredensial database yang digunakan di buruh pelabuhan:

pgAdmin


1
Ini membantu. Saya harus grep alamat IP yang benar dari dalam wadah yang terkait dengan docker Postgres untuk ditambahkan ke konfigurasi server di portal PgAdmin buruh pelabuhan seperti yang ditunjukkan di atas. Puting localhosttidak berhasil.
Andrew Lobban

5

Dalam kasus saya, saya memiliki container PostgreSQL, jadi saya tidak mengubah container saya atau membuat pendekatan docker-compose, saya perlu pgadming setelah beberapa bulan untuk menginstal PostgreSQL, jadi inilah pendekatan saya:

  1. docker inspect my_container_id_postgreSQL
  2. Jaringan yang ditugaskan ke PostgreSQL adalah:

    "Jaringan": {"docker_default": {"IPAddress": "172.18.0.2", ...}}

  3. Jalankan PGADMIN saya dengan --networkperintah.

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

  4. Masukkan alamat Ip ke pgAdmin dan kredensial database yang digunakan di buruh pelabuhan.

Semoga bermanfaat bagi seseorang. Salam.



4

Anda harus mengekspos port postgres di container ke sistem lokal Anda. Anda melakukan ini dengan menjalankan penampung Anda seperti ini:

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

saat menghubungkan dengan klien GUI atau CLI Anda pastikan untuk menggunakan alamat ip bukan localhost meskipun ip-address Anda adalah alamat ip localhost.

docker ps akan memberi Anda alamat ip tempat penyimpanan postgres Anda berada.


4

Jika Anda memverifikasi bahwa PostgreSQL sedang berjalan dan Anda dapat terhubung ke sana dengan salinan lokal PgAdmin ...

Jawabannya sederhana: gunakan host.docker.internalpertama localhostuntuk PgAdmin yang berjalan di dalam Docker

gunakan <code> host.docker.internal </code> istead of <code> localhost </code>


2

Anda dapat membuat jaringan jembatan Docker untuk melakukan ini juga.

$ 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

Buka http: // localhost: 8000 /

  1. Klik Tambahkan Server Baru
  2. Buat - Server
    1. Nama: db
    2. Nama host / alamat: hal
    3. Nama pengguna: postgres
    4. Kata sandi: pg123
  3. Menyimpan

Hostname / alamat yang digunakan di atas adalah nama container Postgres yang diberikan oleh --name pg


Ini adalah pendekatan unik, menggunakan nama penampung sebagai nama host. Pendekatan yang sama seperti menyiapkan Nginx atau semacamnya. Masuk akal.
Sean McCarthy

2

Setelah menghadapi masalah ini selama dua hari, saya dapat menyelesaikan masalah itu.

solusi dari masalah ini sudah dijawab oleh orang-orang seperti lakukan inspeksi

docker inspect CONTAINER_ID

tetapi saat menjalankan perintah ini saya mendapat banyak log seperti Host Config Config Pengaturan Jaringan dll. jadi saya bingung IPAddress mana yang harus ditambahkan ke koneksi pgAdmin karena saya mencoba 0.0.0.0 dan config, host, networkSettings berbeda -2 IPAddress di log tetapi akhirnya berhasil setelah mencoba banyak.

ini berfungsi dengan IP mana, kami harus menambahkan alamat ip jaringan itu (yang kami buat untuk menghubungkan postgres dan pgAdmin .)

seperti dalam kasus saya ketika saya menjalankan: -

buruh pelabuhan memeriksa 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": "",

jadi kita harus menambahkan NetworkSettings -> Network -> Postgres (jaringan yang saya buat) -> IPAddress yaitu "IPAddress": "192.168.16.2".

Setelah menambahkan ip ini, itu akan berfungsi.

Saya harap ini akan membantu.


1

Untuk menemukan ip yang benar untuk penampung Anda, jalankan perintah berikut:

Periksa ID penampung:

docker ps

Untuk memeriksa IP yang benar dari penampung Anda:

docker inspect <ID_CONTAINER> | grep "IPAddress"

Konfigurasi PostgreSQL dan PgAdmin dengan Docker sederhana, jika tidak benar, saya sarankan untuk mengulang konfigurasi dari awal, jika masalah Anda lebih dalam.

Berikut ini skrip yang saya kembangkan untuk mengatasi masalah ini. script-sh / install-docker-postgres-dan-pgadmin


1

Untuk macOS IP postgresdan pgadmin4berbeda dari yang docker inspectdisediakan. Tipe

docker-machine ls

Lihatlah nama server di sebelah kiri. Ini defaultsecara default.

docker-machine ip defaultakan IP yang perlu Anda gunakan untuk keduanya , pgadmin4di browser dan postgresdi pgadmin4pengaturan.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.