【发布时间】: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