【问题标题】:Running two services in a single docker container在一个 docker 容器中运行两个服务
【发布时间】:2020-10-11 02:25:55
【问题描述】:

尽管 docker 旨在在一个容器中运行单个服务,但出于某种原因,我想在一个容器中运行两个相互通信的服务。 我有两个 Spring Boot 服务:Demo 和 Demo2

为此,我制作了一个 shell 脚本来运行两个应用程序的两个 jar,然后将该脚本传递给 Dockerfile 的入口点。

shell 脚本 (invoke.sh)

#!/bin/bash
java -jar app.jar && java -jar app2.jar

Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp

COPY demo/demo/target/demo-0.0.1-SNAPSHOT.jar app.jar
COPY demo2/demo2/target/demo2-0.0.1-SNAPSHOT.jar app2.jar

COPY invoke.sh invoke.sh

ENTRYPOINT ["sh","/invoke.sh"]

图像创建成功。但是当我运行该映像时,它只会启动第一个 Spring Boot 应用程序。

为什么它不启动 app2.jar?我应该怎么做才能启动这两个应用程序?任何解决此问题的帮助都将受到高度评价。

【问题讨论】:

  • 你可以在单个端口上运行单个服务。如果你想运行两个相互通信的服务,最好使用 docker-compose。所以你的服务也可以相互通信,因为相同网络。
  • @BhagyashriMachale 但是如果我使用 docker-compose 它会创建两个容器,对吗?我想要的是一个运行两个服务的容器
  • 您可以使用 Supervisord 在单个容器中运行多个服务。link
  • 您通常会在两个单独的容器中运行两个像这样的单独服务。为什么你特别希望它们合二为一?如果你确实在一个容器中运行它们,如果其中一个进程失败了你会怎么做?

标签: spring-boot docker web-services containers


【解决方案1】:

一旦第一个应用程序以退出状态 0 退出,第二个应用程序将启动。

 #!/bin/bash
java -jar app.jar && java -jar app2.jar

这保证了 jar 文件的顺序执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多