Dockerコンテナを使用してPostgreSQLサーバを実行し、ホストマシンから接続しようとしています。PostgreSQL 9.1用のDockerコンテナがホストにポート5432を公開していない
私の設定は次のとおりです。
- ホスト・マシン:MacのOS X 10.10.5
- ドッカー1.10.1
私はこれをやった:
ステップ1 :永久ポストグルデータ用のボリュームを作成する
docker volume create --name postgres_data
ステップ2:開始のpostgresインスタンス
UPDATE:ドッカーインスタンスに接続:コメントで示唆したように
docker run --name my_postgres_container -e POSTGRES_PASSWORD=my_password -v postgres_data:/var/lib/postgresql/data -p 5432:5432 -d postgres:9.1
は、ステップ3コンテナを実行しているとき、私はポートマッピングを指定これを行うことによって:
docker run -it --link my_postgres_container:postgres --rm postgres:9.1 sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'
Bu私はそのインスタンスに接続したいと思っています:
psql -h localhost -p 5432 -U postgres
私はホストマシンにローカルにPostgresをインストールしたのと同じです。
問題はポート5432は公開されていませんです。だから、私はそれに接続することはできません。
sudo lsof -i -P | grep -i "listen"
- >何のポート5432オープン
UPDATE 2:でも、見知らぬ人。私もこれをやった:
ストップドッカー。その後、私のホストマシンに普通のPostgreSQL 9.4.4のインスタンスを実行します(ここに関係するドッカーはなく、Mac OS Xホストではpostgresが実行され、ポート5432でリッスンします)。すべてが正常です:
sudo lsof -i -P | grep -i "postgres"
postgres 14100 jorge 6u IPv4 0x780274158cebef01 0t0 TCP localhost:5432 (LISTEN)
私は何の問題もなく私の地元のpostgresインスタンスに接続することができます(コマンドの出力を見て:postgresのは、Mac OS X、私のホスト用にコンパイルされます):
psql -h localhost -U postgres -c "select version()"
version
---------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 9.4.4 on x86_64-apple-darwin14.3.0, compiled by Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn), 64-bit
(1 row)
今楽しい部分。ホストのPostgreSQLインスタンスが実行されている間に、私はDockerインスタンスをもう一度起動します。
開始! (それはしないでください)。私は今)(選択したバージョンを実行している場合は、私も
docker run -it --link my_postgres_instance:postgres --rm postgres:9.1 sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'
...ドッキングウィンドウの実行を使用して接続することができ、はそれが同じ時間のpostgresで私のドッキングウィンドウのインスタンス内で実行されているPostgresがドッキングウィンドウの外に、私のホストで実行されている示し、同じ5432ポートを使用してください。(ouputを見て、Postgresのは、Debian、Postgresの内部のOS用にコンパイルさ:9.1コンテナ)
postgres=# select version();
version
------------------------------------------------------------------------------------------------
PostgreSQL 9.1.20 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit
(1 row)
なぜ?
意味がありますか?私の最終的な目標はで、別のDockerコンテナでDjangoアプリケーションを実行し、Postgresインスタンスと接続することです。どうすればいい?
ありがとうございます!私はそれをやった。しかし、まだpsqlを使って接続することはできません。ポート5432が公開されていないか、または接続方法がわかりません。ホストのpsqlプログラムが正常に動作しています(他のホストに接続できますが、コンテナには接続できません) – jorgeas80
'docker port'とは何ですか? –
'5432/tcp - > 0.0.0.0:5432' –