2016-09-24 216 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