2017-07-28 23 views
0

新しいコンテナを作成するために使用するドッカー画像があります。私は将来のコンテナに接続したいマシン上で動作するPostgreSQLデータベースを持っています。Docker、新しいコンテナにホストIPアドレスを追加する

新しく作成されたコンテナは172.17.0.0/16ネットワークに配置されることがわかっていますので、このネットワークをPostgreSQL設定のlisten_addressesパラメータに追加しました。私は一種の私が書くべき対処何connection_ip

docker run --add-host=connection_name:connection_ip container_name 

:私はこのような何かを書くために必要なコンテナを作成するために、今すぐ

?私はlocalhostと書くべきですか、私は外部からのアクセスが可能な固定IPアドレスを書く必要がありますか?

答えて

1

コンテナをどこでも動かせるようにするには、ローカル生成ネットワークのIPアドレス(例えば172.17.0.0/16)に頼ってはいけません。Kubernetesのような高レベルのDockerエンジン管理システムこれらの既定のネットワークや、いくつかのクラウドDockerホスティング環境にも同じことが行われます。

Dockerは、コンテナーとホスト間の通信の必要性を具体的に扱い、オプション--networkで処理します。新しいDockerコンテナを実行すると、IPアドレスを与える必要なく、リンクするネットワーク名を指定することができます。

Dockerエンジン(少なくともバージョン1.9以上)が必要です。このオプションを利用できるようにする必要があります。ここで

は、この新しいオプションを使用して、あなたの問題を解決する方法である:

私たちは、あなたのホストがmyhostのhostnameコマンドの出力)と命名されているものとします。あなたがこの方法をあなたのコンテナを起動する必要があり

docker run --network host container_name 

--networkパラメータ、hostの値は、あなたのホストにこのコンテナを接続することを意味します。

今すぐ、コンテナの内部から、ホスト名はmyhostとなります。さらに、IPアドレスはホスト名myhostのコンテナの/etc/hostsにマップされ、このIPアドレスはネットワーク127.0.0.0/8に割り当てられています。

したがって、コンテナからmyhost:5432へのpostgresql接続は、ホストの観点から見ると、127.0.0.0/8に由来します。 次に、listen_addresses postgresqlパラメータに127.0.0.0/8を追加するだけです。

+0

だから、 'connection_ip'に何を書くべきですか? –

+0

Nothing: '--add-host'を使わないでください。私が書いたコマンドを使用してください: 'docker run --network host container_name' –

+0

PostgreSQLへの接続を書かなければならない私のcontinerの中で、私は' localhost:5432'と書いていますか? –

0

PostgreSQL設定でlisten_addressesに0.0.0.0を使用して、の両方のインタフェースで待機する必要があります。

実際に特定のIPアドレスで実行したい場合は、docker network createでネットワークを作成し、ドッカー実行またはドッカー作成には--ipオプションを使用する必要があります。

0

コンテナからPostgresデータベースに接続するには、entrypointスクリプトからデフォルトのゲートウェイIPアドレスを取得できます。この時点で、あなたはip route show

# ip route show 
default via 172.17.0.1 dev eth0 
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2 

とドッキングウィンドウのホストIPを取得することができ、容器から

次に、デフォルトルートがホストIPである(ここでは172.17.0.1)

、ホストのに注意を払います接続をブロックするファイアウォール

あなたのエントリポイントスクリプトでは、ip route show | awk '/ default/{print $ 3}'のようになります。次に、このIPを環境変数に渡して、アプリケーションで取得することができます。

関連する問題