2017-05-25 9 views
2

私はドッカーの初心者でドッキング用の新規作成者です。私は、ドッカーの作成で実行中のプロジェクトを取得しようとしています。私のバックエンドアプリはDBに接続しようとすると、私はこのエラーを取得する:docker-composeでは、あるコンテナ内のアプリケーションを別のコンテナ内のpostgresデータベースに接続するにはどうすればいいですか?

org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. 

は、あなたがそれを接続しないために発生する可能性があり、私のコンファイルに何かを見ることができますか?

version: "3" 

services: 
    db: 
    image: postgres 
    volumes: 
     - data-volume:/var/lib/db 
    ports: 
    - "5432" 
    backup: 
    image: ubuntu 
    volumes: 
     - data-volume:/var/lib/backup/data 
    backend: 
    image: java 
    restart: always 
    volumes: 
     - data-volume:/var/lib/backup/data 
     - ~/code/myCode:/usr/src/app/ 
    command: sh /usr/src/app/Docker/docker-setup.sh 
    expose: 
     - "8000" 


volumes: 
    data-volume: 
+0

:あなたがそれを必要とする場合、一般的な方法は、コマンドを変更し、(GitHubの上で利用可能)wait-for-it.shスクリプトを追加することですこのように - "5432:5432" '? – filtfilt

答えて

3

データベースがJavaコンテナのlocalhostにありません。 db:5432が また、あなたがあなたのJavaコンテナからのリンクが順番に起動するDBすることができます:あなたはこのようPostgresのにあなたのJava設定を中に指すことができ

backend: 
    image: java 
    links: 
    - db 
    (...the rest...) 

はたぶん、あなたはPostgresはそのポートを開くことを待つ必要があります5432 の前にJavaが起動します(必須かどうかわかりません)。あなたがホストポートにコンテナポートをマッピングしてはなりません

command: /wait-for-it.sh db:5432 -- sh /usr/src/app/Docker/docker........

+0

'depends_on'を使って、バックエンドの開始前にdbが開始されていることを要求することもできます。 https://docs.docker.com/compose/complete-file/#dependson –

+0

バージョン2以上の 'docker-compose.yml'ファイルでは、サービスは同じネットワーク上にあるので、明示的にリンクすべきではないと考えました。 – filtfilt

+0

Filtfilt、そうです。しかし、リンクを表現することでスタートアップの順序が決まります。 *リンクは、depends_onと同じ方法でサービス間の依存関係も表しているため、サービスの起動順序が決まります。 – Robert

関連する問題