2017-11-22 16 views
0

ドッカーの作成を使用して3つのドッキングコンテナーを連続した順序で開始しようとしています。 - >データベース Docker-composeサービスの開始順序

  • 設定 - サービスコンテナ - >春のブートアプリケーション
  • アプリ・サービスコンテナ - >春のブートアプリケーション
    • アプリサービス-DBコンテナ:私は、次のコンテナを持っています

      「app-service」コンテナは、他の2つのコンテナの仕上げを開始したときにのみ開始します。 サービスが利用可能になるのを待つために 'wait-for'スクリプトを使用しています(https://github.com/Eficode/wait-for)。ここで

      私はドッキングウィンドウ-compose.yml

      app.dockerfile
      version: '3.4' 
      services: 
          config-service: 
           image: "config-service:1.0" 
           hostname: config-service 
           container_name: config-service 
           build: 
           context: ../config 
           dockerfile: config.dockerfile 
           expose: 
           - "8888" 
           logging: 
           driver: json-file 
          app-service-db: 
           image: "app-service-db:10.3" 
           hostname: app-service-db 
           container_name: app-service-db 
           build: 
           context: ../app-service 
           dockerfile: app-db.dockerfile 
           environment: 
           MYSQL_ROOT_PASSWORD: password 
           MYSQL_DATABASE: app 
           expose: 
           - "3306" 
           logging: 
           driver: json-file 
          app-service: 
           image: "app-service:1.0" 
           hostname: app-service 
           container_name: app-service 
           build: 
            context: ../app-service 
            dockerfile: app.dockerfile 
           ports: 
            - "8080:8080" 
           expose: 
            - "8080" 
           logging: 
            driver: json-file 
           command: sh -c './wait-for app-service-db:3306 && config-service:8888' 
           depends_on: 
            - config-service 
            - app-service-db 
      

      config.dockerfile

      FROM openjdk:8-jdk-alpine 
      VOLUME /tmp 
      ADD target/config-1.0-final.jar config.jar 
      ENTRYPOINT ["java", "-jar", "config.jar"] 
      EXPOSE 8888 
      

      アプリ-db.dockerfile

      FROM mariadb:10.3 
      

      の内側に持っているものです
      FROM openjdk:8-jdk-alpine 
      VOLUME /tmp 
      ADD target/app-1.0-final.jar app.jar 
      ENTRYPOINT ["java", "-jar", "app.jar"] 
      EXPOSE 8080 
      

      'app-service-db'と 'config-service'が終了する前に 'docker-compose up' cmdを実行すると、 'app-service'コンテナが開始され、見つからないため終了します任意の接続。 この作業を行い、他の2つのコンテナが起動したときにのみ 'app-service'コンテナを強制的に開始するにはどうすればよいですか。

      ありがとうございます。 https://docs.docker.com/compose/compose-file/#depends_on

      これは、ドッカーランタイムの事である:

    答えて

    1

    私はあなたのconfigsでより多くの問題を参照してください。 エントリポイントとコマンドの関係に問題があります。完全に理解してください。これはこちらをご覧ください。What is the difference between CMD and ENTRYPOINT in a Dockerfile? Javaアプリケーションを起動するのがエントリポイントです。

    entrypoint: sh -c './wait-for app-service-db:3306 && ./wait-for config-service:8888 && java -jar app.jar' 
    
    また

    私はあなたがアプリケーションの中でADD欠落している(ドッカ像にこのスクリプト待ちを追加している場所を確認することはできません。 私は、ドッキングウィンドウ-コンで次のセクションを追加することで、アプリ・サービスのためのエントリポイントを上書きすることをお勧めdockerfile?)

    +0

    ドッカの画像で「追加/待ち合わせ待ち」が欠落していましたが、ENTRYPOINT ...ヘルプを削除しました。 –

    +0

    ようこそ! –

    0

    あなたはdepends_onキーワードであなたのdocker-compose.ymlで定義されたあなたのサービスの開始順序を確保することができます。これはDockerイメージを作成するDockerfileには指定しないでください。

    Dockerは、サービスを開始する前に、configおよびdbサービスの開始が完了するのを待たずにいます。 しかし、ドッカーは、このユースケース解決するには、2つの選択肢を説明する公式ドキュメント内の記事がありますよう https://docs.docker.com/compose/startup-order/

    1. のツールを使用し待ち、それhttps://github.com/vishnubob/wait-for-it)またはdockerizehttps://github.com/jwilder/dockerize
    2. または自分自身の待機スクリプトを書く

    記事https://docs.docker.com/compose/startup-order/は両方のソリューションの例です。