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

标签 java oracle tomcat docker

我对 Docker 很陌生并且很喜欢它,但是,我发现运行我的应用程序存在一些问题。我想运行由 2 项服务组成的应用程序:

  1. 我想启动 Oracle 并运行一些 DDL 和 DATA 脚本,这应该需要 30 秒以上

  2. 我想在第一步完成后启动 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?

最佳答案

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"

关于java - Docker:运行Oracle并执行脚本后启动Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39675232/

相关文章:

java - 将参数从 PrimeFaces 数据表传递到托管 bean

java - 数据流编程术语词典

java - 在 Python 中检索 JSON 以响应 POST

java - HotSpot LogCompilation 输出 : Should V (Void) match a java. lang.Object 返回类型?

java - OracleDriver 不接受 jdbcUrl jdbc :oracle:thin@localhost:1521/orcl

java - 如何从 jdbc 调用存储函数?

tomcat - 如何在 Tomcat 中设置自定义 ErrorReportValve?

sql - 带有 XMLTABLE 的 Xpath

eclipse - 使用 TomCat 7 在 eclipse 中运行我的 WAR 时出现异常

.net - 调用 .NET 3.5 Web 服务的 Java 客户端程序