我如何使API服务等到Liquibase服务将所有更改应用到数据库

时间:2018-07-27 04:00:04

标签: docker docker-compose dockerfile

我有3个服务。 DB,API,Liquibase。 API依赖于DDB和Liquibase。以下是我的compose.yml。我面临的问题是,即使我在API服务下有wait-for.sh脚本,该脚本等待DB端口可用于连接,但端口准备好进行连接时,它就会出现。但是创建Db模式并应用DB相关更改的liquibase仍在开发中。因此,由于liquibase服务仍未创建架构,因此API服务无法连接到数据库。如何让API服务等到liquibase在数据库上应用所有更改。

version: '3'
services:
   db:
    build: drs-db
    user: "1000:50"
    volumes:
      - /data/mysql:/var/lib/mysql
    container_name: drs-db
    environment:  
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
    ports:
      - "3307:3306"

   drs-api:
    container_name: drs-api
    hostname: drs-api
    domainname: XX.com
    build:
      context:  ./drs-api
      args:
        DRS_API_URL: XX/${DRS_API_VERSION}
        DRS_API_WAR: drs-web-${DRS_API_VERSION}.war
        DRS_CLIENT_URL: CC/drs-client/${DRS_CLIENT_VERSION}
        DRS_CLIENT_WAR: drs-client-${DRS_CLIENT_VERSION}.war
    ports:  
      - "8096:8443"
    depends_on:
      - db
      - drs-liquibase
    command: [/usr/local/bin/wait-for-it.sh]
    links:
      - "drs-liquibase"

   drs-liquibase:
     container_name: drs-liquibase
     build:
       context: ./drs-liquibase
     environment:
       DRS_CLIENT_VERSION : ${DRS_LIQUIBASE_VERSION}
     depends_on: 
      - db
     links:
       - "db"
     command: ["/usr/local/bin/wait_for_liquibase.sh"]

1 个答案:

答案 0 :(得分:1)

您可以通过共享卷使用某种临时文件。

调整等待以检查迁移准备就绪时是否存在创建的文件,或者等待直到文件被迁移服务删除为止。