docker postgrespgadminローカル接続


98

nginx、php、postgresを使用してubuntuイメージを作成しました。

現在のイメージのpostgresデータベースをpgadminローカルマシンにあるものに接続したいと思います。

docker inspectorを使用して、image ipを使用してローカルのpgadminと接続しようとしましたが、あまり成功しませんでした。また、接続を機能させるために、ローカルでいくつかのポートを構成してみました。


PostgreSQLが外部接続をリッスンしているかどうか(構成ファイルを確認してください)、またはそのポートがローカルマシンから開いているように見えるかどうかはわかりません。
リチャードハクストン2014

1
提供された情報が非常に少ないため、その質問に答えることはできないようです
cthulhu 2014

回答:


91

なぜ人々が「その質問に答えることができないように思われる」と感じるのかわからないのは有効な質問です。

だから、これがあなたがやろうとしていることを私がする方法です:

  1. DockerHubからpostgresイメージをプルする

    docker pull postgres:latest

  2. 以下のコマンドを使用してコンテナを実行します

    docker run -p 5432:5432 postgres

  3. dockerのinspectコマンドを使用してIPを見つけます

  4. そのIP、ポート、ユーザー名、およびパスワードを使用してPGADMINに接続します

  5. 以下のような簡単なtelnetを実行して、dockerpostgresコンテナにアクセスできるかどうかを確認することもできます。

    telnet IP_ADDRESS 5432


16
これを使用してポートを公開している場合は-p 5432:5432、ホストIPを使用できるコンテナーのIPを見つける必要はありません。または127.0.0.1、単にlocalhost
Davos

投稿の意図は有効ですが、SEにとって高品質の投稿ではありません。まず、実際の「質問」はありません。さらに、彼らがプロセスをどのように試したか、またはそれを行っている間に受け取ったエラーの兆候はありません。そうは言っても、あなたは素晴らしい対応をしたと思います。
duct_tape_coder

3
この答えは私にとって有用なので、それは有効な質問です。
トッド

-p 5432:5432を使用してコンテナーをホストにマップしましたが、それでも接続エラーが発生します。docker inspectから取得したIPアドレスを使用してみましたが、機能します。
ginad

50

Windows 1.12.6(9655)用のdockerを実行しているWindows 10で成功したことは、次のような手順です。

  1. 最新のpostgresをプルする

    docker pull postgres:latest

  2. postgresコンテナを実行します。

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

  3. 次に、pgadminWebサイトから最新バージョンのpgAdmin4をインストールしました

  4. pgAdmin 4を実行して新しいサーバーを作成し、次のように入力します。ホスト:127.0.0.1ポート:5432ユーザー名:ユーザーパスワード:password123

  5. その後、すべてがOKです。dockerpostgresインスタンスの成功に接続します。

45

または、PostgresとPgadminを1つのdocker-composeファイルにまとめて、ユーザーpgadmin4@pgadmin.orgpwd:としてログインすることもできます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
'ホスト名 "postgres"をアドレスに変換できませんでした:nodenameまたはservnameが提供されているか、不明です'。
Enrique OrtizCasillas20年

1
ホスト名「postgres」をアドレスに変換できませんでした:名前が解決されません
プロキシ

2
の場合docker network ls、postgresからpgadminへのネットワークへのブリッジが表示されます(私のものはpostgres_postgresです)。次に、docker network inspect postgres_postgresそれぞれがip / hostnameを持つ2つのコンテナーを確認できます。Postgres(私のものはpostgres_db_1)から1つを取得して、pgAdminから正常に接続します。
無記号

28

これは私がしたことです

postgres用

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
また、このアプローチを使用して、dockerでpostgresとpgAdminの両方を作成しました。どのような入力値として私のために働いたことは@SolidSnakeからの回答だった- stackoverflow.com/a/58224344/4288961 >ドッカCONTAINER_IDを検査します| grepIPアドレス。そしてホストとして、この結果IPアドレスを使用
Prusdrum

驚くばかり!。非常に役立ちます。私は「host.docker.internal」の値に必要な
エルナン・アコスタ

20

私の場合、コマンドを使用してpostgreイメージを検査する問題を解決できました

docker inspect CONTAINER_ID  | grep IPAddress.

そのため、docker ipアドレスを使用してpgadmin4接続を構成しましたが、すべて問題ありませんでした。@AfshinGhaziに感謝します


17

pgAdminが同じUbuntuホスト/ゲストで実行されることを意図している場合は、postgresコンテナーをリンクする必要があるため、名前で解決できます。

1.postgresコンテナを実行します。

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 Webアプリに新しいサーバーを追加するときにsome-postgres、サーバー名として使用します

--link some-postgrespgAdminを起動したときのことに注意してください。このコマンドは、postgresコンテナをpgAdminコンテナに表示します。


1
psqを使用してサーバーに接続でき、pgadminインターフェイスにログインします。しかし、pgadminインターフェースからpostgresサーバーに接続するときにどのネットワーク/ポートを使用しますか?
トム

1
Dockerのドキュメント(docs.docker.com/network/links)から注目に値するのは、pgadminコンテナをpostgresコンテナと通信させるために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のローカルインストールからpostgresにアクセスできます。
duct_tape_coder

13

データベースとpgAdminを取得するために、これをdockeryamlファイルに含めました。

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のユーザー名はalphaoneで、パスワードはxxxxxxxxxxxです。

を実行しdocker psてコンテナIDを取得してから、docker inspect <dockerContainerId> | grep IPAddress

例えば: docker inspect 2f50fabe8a87 | grep IPAddress

IpアドレスをpgAdminに挿入し、dockerで使用されるデータベース資格情報を挿入します。

pgAdmin


1
これは役に立ちました。上記のようにdockerPgAdminポータルのサーバー構成に追加するには、dockerPostgresに関連付けられたコンテナー内から正しいIPアドレスをgrepする必要がありました。パッティングlocalhostが機能しませんでした。
AndrewLobban19年

6

PostgreSQLが実行されていることを確認し、そこにPgAdminのローカルコピーで接続できる場合...

答えは簡単ですhost.docker.internal。Dockerlocalhost内で実行されているPgAdminの代わりにiを使用してください。

<code> localhost </ code>の代わりに<code> host.docker.internal </ code>を使用します


5

私の場合、PostgreSQLコンテナを持っていたので、コンテナを変更したり、docker-composeアプローチを作成したりしませんでした。数か月後に、PostgreSQLをインストールするためにpgadmingが必要だったので、これが私のアプローチです。

  1. docker inspect my_container_id_postgreSQL
  2. PostgreSQLに割り当てられたネットワークは次のとおりです。

    "ネットワーク":{"docker_default":{"IPアドレス": "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に挿入し、dockerで使用されるデータベース資格情報を挿入します。

これが誰かに役立つことを願っています。よろしく。



4

コンテナ内のpostgresポートをローカルシステムに公開する必要があります。これを行うには、次のようにコンテナを実行します。

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

GUIクライアントまたはCLIに接続するときは、IPアドレスがローカルホストのIPアドレスであっても、必ずローカルホストではなくIPアドレスを使用してください。

docker ps postgresコンテナが存在するIPアドレスを提供します。


3

この問題に2日間直面した後、私はその問題を解決することができました。

この問題の解決策は、検査を行うような人々によってすでに答えられています

docker inspect CONTAINER_ID

しかし、このコマンドを実行している間、Host Config Config Network Settingsなどのログがたくさんあるので、0.0.0.0とconfig、host、networkSettingsの異なる-2 IPAddressを試したため、pgAdmin接続に追加するIPAddressが混乱しました。ログを記録しますが、最終的にはa-lotを試した後に機能します。

どのIPで動作するので、そのネットワークIPアドレス(postgrespgAdminを接続するために作成したもの)を追加する必要があります。

私が走るときの私の場合のように:-

docker inspect 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(mine created network)-> IPAddress ie "IPAddress": "192.168.16.2"を追加する必要があります。

このIPを追加すると、機能します。

お役に立てば幸いです。


2

これを行うためにDockerブリッジネットワークを作成することもできます。

$ 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:// localhost:8000 /を開きます

  1. [新しいサーバーの追加]をクリックします
  2. 作成-サーバー
    1. 名前:db
    2. ホスト名/アドレス:pg
    3. ユーザー名:postgres
    4. パスワード:pg123
  3. 保存する

上記で使用されているホスト名/アドレスは、によって指定されたPostgresコンテナの名前です。 --name pg


これは、コンテナ名をホスト名として使用する独自のアプローチです。Nginxなどを設定するのと同じアプローチ。理にかなっています。
ショーンマッカーシー

1

コンテナの正しいIPを見つけるには、次のコマンドを実行します。

コンテナIDを確認してください:

docker ps

コンテナの正しいIPを確認するには:

docker inspect <ID_CONTAINER> | grep "IPAddress"

Dockerを使用したPostgreSQLとPgAdminの両方の構成は単純ですが、正しくない場合は、問題がさらに深刻な場合は、構成を最初からやり直すことをお勧めします。

これは、この問題を解決するために私が開発したスクリプトです。 script-sh / install-docker-postgres-and-pgadmin


1

macOSのIPの場合、postgresおよびpgadmin4docker inspect提供するものとは異なります。タイプ

docker-machine ls

左側のサーバーの名前を見てください。それはだdefault、デフォルトで。

docker-machine ip defaultブラウザと設定の両方で使用する必要のあるIPpgadmin4postgresなりpgadmin4ます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.