Docker:运行Oracle并执行脚本后启动Tomcat

时间:2016-09-24 10:18:47

标签: java oracle tomcat docker

我对Docker很陌生并喜欢它,但是,我发现运行我的应用程序时遇到了一些问题。我想运行包含2项服务的应用程序:

  1. 我想启动Oracle并运行一些应该花费30秒以上的DDL和DATA脚本

  2. 我想在第一步完成后启动Tomcat并启动我的war文件,因为没有它就无法启动。

  3. 我已经阅读过:docker-wait这不是我正在等待的内容,因为我的数据库在指定端口上可用后我应该执行一些脚本。

    据我了解,启动多服务应用程序的正确方法是使用docker compose

    以下是我的docker-compose.yml

    version: '2'
    services:
    web:
    build: Server
    ports:
     - "8080:8080"
    depends_on:
     - oracle
    oracle:
    build: Oracle
    ports:
     - "1521:1521"
    

    depends_on只是让我订购应用程序的开始而已。

    对于Tomcat和Oracle,我使用Docker Hub中最流行的图像。

    在Oracle启动并执行脚本后,我怎样才能获得启动Tomcat的正确方法?

1 个答案:

答案 0 :(得分:1)

depends_on仅检查容器是否正在运行,而不是其中的服务已准备好接受请求。您希望只有在web服务准备就绪后才能启动oracle服务。您可以使用wait-for-it之类的脚本来执行此操作。例如:

version: '2'
services:
  web:
    build: Server
    ports:
      - "8080:8080"
    depends_on:
      - oracle
    command: wait-for-it.sh oracle:1521 --timeout=8 -s -q -- myservercmd
  oracle:
    build: Oracle
    ports:
    - "1521:1521"