簡體   English   中英

Docker-compose:如何知道容器中的jar完成運行並隨后啟動其他容器的時間

[英]Docker-compose: how to know when jar inside a container finish to run and later start other container

我有多個容器,每個容器都運行不同的jar,但是其中一個jar需要在一個jar完成啟動后運行,因此我使用了depends_on -compose.yml的depends_on屬性,但這僅在容器完成后才有效,而不是罐子,所以我該如何告訴一個容器等待,直到另一個容器中的罐子開始啟動,

這是我的docker-compose.yml文件:

version: '3.3'
services:
  cloudconfig:
    image: cloudconfig
    ports:
      - "8001:8001"
    hostname: cloudconfig
    container_name: cloudconfig
  eureka1:
    image: eureka
    ports:
      - "8011:8011"
    hostname: eureka-primary
    container_name: eureka-primary
    environment:
      - perfil=-Dspring.profiles.active=primary
  eureka2:
    image: eureka
    hostname: eureka-secondary
    container_name: eureka-secondary
    environment:
      - perfil=-Dspring.profiles.active=secondary
  eureka3:
    image: eureka
    hostname: eureka-tertiary
    container_name: eureka-tertiary
    environment:
      - perfil=-Dspring.profiles.active=tertiary
  mscargos:
    depends_on: 
      - "eureka1"
      - "eureka2"
      - "eureka3"
    image: mscargos
    hostname: mscargos
    container_name: mscargos
  zuul:
    depends_on:
      - "mscargos"
    image: zuul
    ports:
      - "8125:8125"
    hostname: zuul
    container_name: zuul

提前致謝

沒有做到這一點的干凈方法,只有解決方法。

官方文檔您必須使用外部工具,例如./wait-for-it.sh

使用諸如wait-for-it,dockerize或與sh兼容的wait-for之類的工具。 這些是小的包裝腳本,您可以將其包含在應用程序的映像中,並將輪詢給定的主機和端口,直到它接受TCP連接為止。

您要做的是實現一些REST終結點,一旦容器准備好,該終結點將返回HTTP 200。 從屬容器必須一直命中此端點,直到它獲得HTTP 200,然后才啟動主進程。

您可以使用如下形式:

Dockerfile:

ADD wait-for-it.sh /wait-for-it.sh

docker-compose.yml:

command: bash -c "./wait-for-it.sh your-servise:8080 && java -jar your-app.jar"

還有一種更簡單,更嚴格的轉發方式 ,它不需要任何API的實現。 您可以簡單地在要求其他命令處於活動狀態的過程之前添加一些sleep命令。

這樣,您的撰寫可能如下所示:

command: bash -c "sleep 60s && java -jar your-app.jar"

但是,您應該調查這種方法是否適合您的情況。

注意:我以java -jar your-app.jar為例,但您可能有一些不同的命令(即使不是Java)。 只需用開始過程的方式替換此部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM