Гибко запускайте докер с изменяемыми аргументами программы

Я использую docker-compose v3. Самая интересная часть конфигурации:

entrypoint:
  - java
  - -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=docker-test -jar /app.jar

обратите внимание на -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=docker-test -jar /app.jar - активный профиль docker-test. Эта конфигурация работает для меня. Попытка улучшить одно, перемещая значение профиля в отдельную переменную:

environment:
 - profiles=docker-test

и обновление java параметров с улучшением:

  - -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=$profiles -jar /app.jar

программа не работает. Проверка журналов:

INFO 1 --- [           main] c.s.n.d.m.d.DiscoveryServiceApplication  : No active profile set, falling back to default profiles: default

это означает, что улучшение докера не видно на уровне java, кажется, что переменная $profiles не была заменена ее значением. Сравнение уровня Java с предыдущим примером - значение изменено, но ожидается, что оно должно быть таким же.

Есть идеи, как это исправить?

P.S.

В случае, если я делаю то же самое на уровне Dockerfile - это работает:

ENV profiles=docker-test
ENTRYPOINT java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=$profiles -jar /app.jar
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для этого вам нужно будет использовать .env файл. Docker Compose не может заменить переменные в environment: в других частях вашего файла конфигурации (в данном случае entrypoint:). Вы можете проверить это, когда запустите docker-compose config в папке вашего проекта, и вы увидите, что profiles пусто.

Создайте файл с именем .env в том же каталоге, где живет ваш docker-compose.yml. Содержание должно быть:

profiles=docker-test

Тогда вы должны быть готовы идти.

Минимальный пример:

  • докер-compose.yml:
version: "3.7"

services:

  foo:
    image: alpine
    entrypoint:
      - echo
      - "$bar"
  • .env
bar = "i was correctly read"

Результат:

nico@tuxedo:~/StackOverflow$ docker-compose config
services:
  foo:
    entrypoint:
    - echo
    - '"i was correctly read"'
    image: alpine
version: '3.7'
nico@tuxedo:~/StackOverflow$ docker-compose up
Starting stackoverflow_foo_1 ... done
Attaching to stackoverflow_foo_1
foo_1  | "i was correctly read"
stackoverflow_foo_1 exited with code 0

Не могли бы вы описать жизненный цикл, возможно, в своем ответе (...какие-то особые условия, поведение жизненного цикла в зависимости от него и т. д.)? Я был проинформирован о .env ранее, но этот подход, к сожалению, не работает для описанного случая.

Sergii 03.06.2019 20:12

Почему в вашем случае не работает? Я добавлю минимальный пример к моему ответу. По другим вопросам обращайтесь к документации Docker, на которую я уже ссылался в ответе. Там вы найдете более подробные ответы, чем я мог бы дать здесь.

bellackn 04.06.2019 11:29

Кажется, я ошибся с вашей рекомендацией. Я пропустил "

Sergii 05.06.2019 16:13

Другие вопросы по теме