私は港湾労働者コンテナー内のサーバー上のPostgresqlを持っています。外部から、つまり自分のローカルコンピュータから接続するにはどうすればよいですか。それを可能にするためにどのような設定を適用すべきですか?
あなたはこの方法で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で実行されている)にアクセスしているのです。
この記事に それは詳細に説明されています。
私はそれを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に置き換えてください。
Docker execコマンドでもアクセスできます。
$ docker exec -it postgres-container bash
# su postgres
$ psql
私はすでにホストマシン上で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
私は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
これは私が共有したい私の経験でした。おそらく誰かがそれを利用することができます。
ローカルホストから接続するには、 ' - 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
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でアクセスできませんでした。
まずpostgresのdocker画像を開きます
docker exec -it <container_name>
それからuはルートを取得します--root@868594e88b53:/#
それはデータベース接続が必要です
psql postgresql://<username>:<databasepassword>@postgres:5432/<database>
docker ps -a
コンテナIDを取得してからdocker exec -it psql -U -W
念のため、それはDjangoバックエンドアプリケーションです、あなたはこのようなことをすることができます。
docker exec -it container_id python manage.py dbshell
良い答えはここにありますが、もしあなたがpostgresデータベース管理のためのインターフェースを持ちたいのであれば、あなたのローカルコンピュータにpgAdminをインストールし、そのIPとpostgres公開ポート(デフォルトで5432)を使ってリモートマシンに接続できます。
なんらかの理由で5432ポートが保護されているようです。私のポート設定を5432:5432
から5416:5432
に変更し、次のコマンドで dockerコンテナの外側からあなたのpostgresデータベースに接続しました :
psql -h localhost -p 5416 -U <my-user> -d <my-database>