我对Docker很陌生并喜欢它,但是,我发现运行我的应用程序时遇到了一些问题。我想运行包含2项服务的应用程序:
我想启动Oracle并运行一些应该花费30秒以上的DDL和DATA脚本
我想在第一步完成后启动Tomcat并启动我的war文件,因为没有它就无法启动。
我已经阅读过: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的正确方法?
答案 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"