2016-09-24 101 views
0

我对Docker真的很陌生并且很享受,但是,我发现运行我的应用程序时遇到了一些问题。我想运行我的应用程序,它由2个服务:Docker:运行Oracle并执行脚本后启动Tomcat

  1. 我想启动Oracle和运行应采取30秒以上

    一些DDL和数据的脚本
  2. 我想启动Tomcat,第一步完成后启动我的战争文件,因为它没有它就不会启动。

我已经读到:docker-wait这不是什么我究竟在等待,我应该执行一些脚本后,我的数据库将可指定的端口上。

据我所知,启动multiservises应用程序的正确方法是使用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

depends_on只检查容器是否正在运行,而不是它内部的服务已准备好接受请求。只有当您的oracle服务准备就绪时,您需要的服务才能启动您的web服务。您可以使用像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" 
+0

我会试试,谢谢 – quento

+0

我应该在哪里放置wait-for-it.sh? – quento

+0

在您的Dockerfile中使用'COPY wait-for-it.sh/usr/local/bin /'。 – Alkaline

相关问题