【问题标题】:How do I run a command from one Docker container in another?如何从另一个 Docker 容器中运行命令?
【发布时间】:2018-05-21 12:01:27
【问题描述】:

我有一个应用程序和一个数据库容器。我用 Docker Compose 提出了它们。 app 容器需要等到 db 容器启动后再执行 schema 初始化 SQL。我需要在我的wait-for-db 脚本执行后执行它,因此它应该在应用程序容器的CMD 中执行。问题是 db 容器不包含 ssh。如何运行特定命令,例如

sqlplus system/oracle @schema.sql

从应用容器到数据库容器?

非常感谢!

更新:也许,在 Oracle 12c 中有一种通过 HTTP 执行 SQL 的方法吗?

【问题讨论】:

    标签: oracle docker docker-compose dockerfile oracle12c


    【解决方案1】:

    您的数据库容器不需要 ssh。您在应用容器上的等待脚本可以在继续之前测试 db 容器上的 oracle 侦听器端口 1521 的可用性。

    例如在应用程序容器的 docker-compose 条目中,假设“db”是 db 容器的名称:

    command: "./wait-for-it.sh db:1521 runsql.sh"
    

    其中runsql.sh 是获取必要的oracle 环境变量并运行sqlplus 的脚本。

    【讨论】:

    • 但我还需要在检查后运行 Java 服务器,并且 afaik 最好将此逻辑保留在应用程序映像的 Dockerfile 中。有没有办法执行两个命令:Docker Compose yaml 中的命令,然后是镜像 Dockerfile 中的命令?
    • 你不能同时运行这两个,但是等待它之后运行的脚本可以包含任何东西。它可以运行架构初始化,然后启动 java 服务器,以及您需要的任何其他内容。
    猜你喜欢
    • 2018-03-19
    • 2020-03-20
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多