2017-06-29 9 views
4

私は3つのサーバー(1マネージャーと2ワーカー)を持つDocker Swarmクラスターセットアップを持っています。Docker Swarm内のPostgreSQLサービスに接続するには?

私は、以下のコマンドを使用して、PostgreSQLサービスを開始しました:

docker service create --name postgresql \ 
    --mount src=pg_data,dst=/var/lib/postgresql/data/pgdata \ 
    -p 6542:5432 \ 
    -e POSTGRES_USER="user" \ 
    -e POSTGRES_DB="db" \ 
    -e POSTGRES_PASSWORD="pass" \ 
    -e PGDATA=/var/lib/postgresql/data/pgdata \ 
    --constraint 'node.role == manager' \ 
    postgres 

私も以前のデータボリュームを作成しました:

docker volume create pg_data 

は今、私は私が開始する別のサービスを、持っています基本的に私はDockerイメージにバンドルされたJavaアプリケーションで、postgresqlサービスに接続したいと思っています。私は、URLの以下の組み合わせを試してみました:

JDBC:postgresqlの://172.18.0.1:5432 /デシベル(docker_gwbridge)

JDBC:postgresqlの://172.17.0.1:5432 /デシベル(docker0 )

JDBC:postgresqlの:// localhostを:5432 /デシベル

JDBC:postgresqlの:// postgresqlの:5432 /デシベル

任意のアイデア何を仕事ができますか?

答えて

3

swarmモードでデータベースに接続するには、swarm overlay networkを使用する必要があります。このネットワークあなたのpostgresqlサービスの利用を作る次に

docker network create -d overlay mynet 

まず、オーバーレイネットワークを作成

docker service create --name postgresql \ 
    --mount ... \ 
    --network mynet \ 
    postgres 

を次に、Javaアプリケーション・コンテナに同じネットワークを使用することを忘れないでください:

docker service create --name myjavaapp \ 
    --network mynet \ 
    myjavaapp 

次に、postgresqlに接続できます以下のようなDNS名によって:

jdbc:postgresql://postgresql:5432/db 

mynetネットワーク内のすべてのサービスのコンテナ(あなたが望むようあなたがそれを呼び出すことができ、それだけで名前の参照です)、名前をサービスに対応するDNSエントリを持っています。これは、javaアプリケーションを起動する前に、docker inspectからコンテナのIPを取得するよりも簡単です。

publishポート-p 6542:5432をあなたのpostgresqlドッカーサービスに避けることもできます。これはおそらくこれを他人に公開したくないからです。

official doc to better understand networks in swarm modeをご覧ください。

このSO QAは、オーバーレイネットワークについても説明しています。

関連する問題