【发布时间】:2019-11-10 07:11:22
【问题描述】:
我已经编写了一个基于 Scala 和 Akka HTTP 的 REST API 并创建了 Dockerfile 来为这个 API 创建 Docker 映像。我的 Dockerfile 如下:
FROM maven:3.6.0-jdk-8-alpine AS MAVEN_TOOL_CHAIN
COPY pom.xml /tmp/parent/
COPY data-catalogue/pom.xml /tmp/parent/data-catalogue/
COPY data-catalogue/src /tmp/parent/data-catalogue/src/
WORKDIR /tmp/parent/data-catalogue/
RUN mvn package
FROM java:openjdk-8
COPY --from=MAVEN_TOOL_CHAIN /tmp/parent/data-catalogue/target/data-catalogue-1.0-SNAPSHOT.jar /opt/data-catalogue.jar
COPY data-catalogue/src/main/resources/logback.xml /opt/logback.xml
ENTRYPOINT ["java", "-Dlogging.config=/opt/logback.xml", "-jar", "/opt/data-catalogue.jar", "prod"]
CMD ["8080"]
到目前为止一切都很好。我可以使用此映像运行一个容器。
现在的要求是在同一个 Docker 主机上使用这个镜像运行两个容器。我已经修改了 REST API 主类,以便它将必须在其上运行的端口号作为命令行参数。如果没有提供命令行参数,那么它将监听 8080 端口上的请求。
我想知道如何在启动容器时向我的 REST API 提供命令行参数?
例如:
- REST API 的第一个实例应该在端口 5555 上启动/运行,因此这个 5555 参数应该到达 REST API 的主类
- REST API 的第二个实例应该在端口 1111 上启动/运行,因此这个 5555 参数应该到达 REST API 的主类
我已尝试为此使用ENTRYPOINT 和CMD,但我的命令行参数根本无法到达主类,并且 REST API 仅在 8080 端口上启动。
【问题讨论】:
-
为什么不使用
ARG? -
我对 Docker 还很陌生,所以不知道这个 ARG。会尝试并让你知道。谢谢
-
我给你加了一个例子
-
你的意思是你的容器端口应该是5555和1111?您需要将它们映射到主机吗?
-
@deosha 是的。主机应该将 5555 上的请求转发到容器 5555 端口,并且我的 AKKA REST API 也应该开始监听 5555 端口
标签: scala rest docker containers akka-http