Я написал один REST API для Scala и Akka HTTP и создал Dockerfile для создания образа Docker для этого API. Мой 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. Я изменил основной класс API REST таким образом, чтобы он принимал номер порта, на котором он должен работать, в качестве аргумента командной строки. Если аргумент командной строки не указан, он будет прослушивать запросы на порт 8080.
Я хотел бы знать, как предоставить параметр командной строки для моего REST API при запуске контейнера?
Например:
- Первый экземпляр REST API должен запускаться / запускаться на порту 5555, поэтому этот аргумент 5555 должен достигать основного класса REST API
- Второй экземпляр REST API должен запускаться / запускаться на порту 1111, поэтому этот аргумент 5555 должен достигать основного класса REST API
Я пытался использовать ENTRYPOINT
и CMD
для этого, но мой аргумент командной строки просто не достигает основного класса, и REST API запускается только на порту 8080.