2017-06-27 21 views
2

私はPostgresデータベースで動作するJava Spring Bootアプリケーションを持っています。私は彼らの両方のためにDockerを使いたい。私は当初、Postgresはドッカーにだけ入れて、私は次のように定義されたdocker-compose.ymlファイル持っていた:私は、コマンドsudo dockerdsudo docker-compose -f docker-compose.yml upを発行Docker Compose + Spring Boot + Postgres接続

その後
version: '2' 
services: 
    db: 
     container_name: sample_db 
     image: postgres:9.5 
     volumes: 
      - sample_db:/var/lib/postgresql/data 
     environment: 
      - POSTGRES_PASSWORD=sample 
      - POSTGRES_USER=sample 
      - POSTGRES_DB=sample 
      - PGDATA=/var/lib/postgresql/data/pgdata 
     ports: 
      - 5432:5432 

volumes: 
    sample_db: {} 

は、それがデータベースを始めていたが。 pgAdminを使用して接続することができます。例えば、サーバとしてlocalhostを使用し、5432のポートを使用して接続できます。その後、私のSpring Bootアプリでは、application.propertiesファイルの中で次のプロパティを定義しました。

spring.datasource.url=jdbc:postgresql://localhost:5432/sample 
spring.datasource.username=sample 
spring.datasource.password=sample 
spring.jpa.generate-ddl=true 

この時点で私はSpring Suiteを通じてSpring Bootアプリケーションをローカルで実行でき、すべて正常に動作していました。その後、Spring BootアプリをDockerイメージとして追加したいと考えました。

FROM java:8 
EXPOSE 8080 
ADD /target/manager.jar manager.jar 
ENTRYPOINT ["java","-jar","manager.jar"] 

その後、私はmvn install続いmvn clean発行されたプロジェクトのディレクトリに入力された:私が最初にすべての、このようになります私のプロジェクトのディレクトリにDockerfileを作成しました。次に、docker build -f Dockerfile -t manager .が発行され、続いてdocker tag 9c6b1e3f1d5e myuser/manager:latest(idが正しい)が発行されます。私はsudo docker-compose -f docker-compose.yml upコマンドを発行する場合は、今、データベースが再び正常に起動しますが、私はエラーとWebアプリケーションの一部の終了コード1を取得し、

version: '2' 
services: 
    web: 
     image: myuser/manager:latest 
     ports: 
      - 8080:8080 
     depends_on: 
      - db 
    db: 
     container_name: sample_db 
     image: postgres:9.5 
     volumes: 
      - sample_db:/var/lib/postgresql/data 
     environment: 
      - POSTGRES_PASSWORD=sample 
      - POSTGRES_USER=sample 
      - POSTGRES_DB=sample 
      - PGDATA=/var/lib/postgresql/data/pgdata 
     ports: 
      - 5432:5432 

volumes: 
    sample_db: {} 

しかし:最後に、私はこのように見て、私の既存のdocker-compose.ymlファイルを編集しました。問題は接続文字列です。私はそれを何かに変えなければならないと信じていますが、私はそれが何であるべきか分かりません。次のエラーメッセージが表示されます。

web_1 | 2017-06-27 22:11:54.418 ERROR 1 --- [   main] o.a.tomcat.jdbc.pool.ConnectionPool  : Unable to create initial connections of pool. 
web_1 | 
web_1 | 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 

答えて

8

各コンテナには、独自のローカルホストとの独自のネットワークインターフェイスがあります。だから、PostgresのにどのようにJavaのポイントを変更します。

spring.datasource.url=jdbc:postgresql://localhost:5432/sample 

へ:

spring.datasource.url=jdbc:postgresql://db:5432/sample 

dbが適切なPostgresのIPに解決されます。


ボーナス。ドッカーを使って手作業でイメージを構築する必要はありません。だから、変更:

web: 
    image: myuser/manager:latest 

へ:

web: 
    build: . 
+0

それがうまく働いた、ありがとうございます。 – typos

+0

ようこそ。 – Robert

関連する問題