web-dev-qa-db-ja.com

外部からdockerコンテナでPostgresqlに接続する

私は港湾労働者コンテナー内のサーバー上のPostgresqlを持っています。外部から、つまり自分のローカルコンピュータから接続するにはどうすればよいですか。それを可能にするためにどのような設定を適用すべきですか?

117
Sojo

あなたはこの方法でPostgresを走らせることができます(ポートをマップする):

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres

これで、コンテナのポート5432をサーバーのポート5432にマッピングしました。 -p <Host_port>:<container_port>。これであなたのpostgresはあなたのpublic-server-ip:5432からアクセス可能になりました

テストするには:postgresデータベースを実行します(上記のコマンド)。

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
05b3a3471f6f        postgres            "/docker-entrypoint.s"   1 seconds ago       Up 1 seconds        0.0.0.0:5432->5432/tcp    some-postgres

コンテナの中に入り、データベースを作ります。

docker exec -it 05b3a3471f6f bash
root@05b3a3471f6f:/# psql -U postgres
postgres-# CREATE DATABASE mytest;
postgres-# \q

あなたのlocalhost(あなたが何らかのツールやpsqlクライアントを持っているところ)に行ってください。

psql -h public-ip-server -p 5432 -U postgres

(パスワードmysecretpassword)

postgres=# \l

                             List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges
-----------+----------+----------+------------+------------+-----------------------
 mytest    | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres   

つまり、ローカルホストからデータベース(サーバー上のdockerで実行されている)にアクセスしているのです。

この記事に それは詳細に説明されています。

229
lvthillo

私はそれをLinux上で走らせることができた

  • 1まずdocker postgresを実行し、portが公開されていることを確認します。軽量なのでAlpineを使用します。

    Sudo docker run --rm -P -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234" --name pg postgres:Alpine

  • 2別の端末を使い、postgres uriを使ってホストからデータベースにアクセスします。

    psql postgresql://postgres:1234@localhost:5432/postgres

macユーザーの場合は、psqlをpgcliに置き換えてください。

19
Thomas Webber

Docker execコマンドでもアクセスできます。

$ docker exec -it postgres-container bash

# su postgres

$ psql
16
SuperNova

私はすでにホストマシン上でpostgresを実行していて、ネットワークからの接続を許可したくないので、コンテナ内で一時的なpostgresインスタンスを実行し、2行でデータベースを作成しました。

# Run PostgreSQL
docker run --name postgres-container -e POSTGRES_PASSWORD=password -it -p 5433:5432 postgres

# Create database
docker exec -it postgres-container createdb -U postgres my-db
12
Eugene

私はlocalhost(mac)からpostgresコンテナに接続しようとしました。 docker-composeファイルのポートを5432から3306に変更してコンテナを起動しました。私がなぜそうしたのかわからない。

それから私はPSequelとadminerを通してpostgresに接続しようとしました、そして、接続は確立できませんでした。

ポート5432に切り替えた後は、すべて問題なく動作します。

  db:
    image: postgres
    ports:
      - 5432:5432
    restart: always
    volumes:
      - "db_sql:/var/lib/mysql"
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: password
      POSTGRES_DB: postgres_db

これは私が共有したい私の経験でした。おそらく誰かがそれを利用することができます。

4
Martin

ローカルホストから接続するには、 ' - net Host'を追加する必要があります。

docker run --name some-postgres --net Host -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres

次のようにすれば、ローカルホストからexecを使わずに直接サーバーにアクセスできます。

psql -h localhost -p 5432 -U postgres
3
user2627846

Dockerコンテナの中でDjangoをpostgresと共に使っています。 docker-composeファイルに以下を追加します。

db:
    image: postgres:10-Alpine
    environment:
        - POSTGRES_DB=app
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=supersecretpassword
    **ports:
        - "6543:5432"**

これはあなたのローカルマシンからアクセス可能なポートを追加します。私自身は、DBeaverをそれに接続しました。これはあなたのアプリリクエストとローカルマシンリクエストの間のポート衝突を防ぐでしょう。最初は、ポート5432が使用されている(Djangoアプリによる)というメッセージが表示されたため、pgAdminまたはDBeaverでアクセスできませんでした。

2
omeraiman

まずpostgresのdocker画像を開きます

docker exec -it <container_name>

それからuはルートを取得します--root@868594e88b53:/#それはデータベース接続が必要です

psql postgresql://<username>:<databasepassword>@postgres:5432/<database>
1
ashutosh gupta

docker ps -aコンテナIDを取得してからdocker exec -it psql -U -W

0
Afshin Ghazi

念のため、それはDjangoバックエンドアプリケーションです、あなたはこのようなことをすることができます。

docker exec -it container_id python manage.py dbshell
0
SuperNova

良い答えはここにありますが、もしあなたがpostgresデータベース管理のためのインターフェースを持ちたいのであれば、あなたのローカルコンピュータにpgAdminをインストールし、そのIPとpostgres公開ポート(デフォルトで5432)を使ってリモートマシンに接続できます。

0
CageE

なんらかの理由で5432ポートが保護されているようです。私のポート設定を5432:5432から5416:5432に変更し、次のコマンドで dockerコンテナの外側からあなたのpostgresデータベースに接続しました

psql -h localhost -p 5416 -U <my-user> -d <my-database>
0
Marc Pe-Pe