Гибкий запуск Docker с изменяемыми аргументами программы - PullRequest
1 голос
/ 02 июня 2019

Я использую 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 с предыдущим примером - значение изменилось, но ожидание должно быть таким же.

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

PS

В случае, если я 'Я делаю аналогичные вещи на уровне Dockerfile - это работает:

ENV profiles=docker-test
ENTRYPOINT java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=$profiles -jar /app.jar

1 Ответ

1 голос
/ 02 июня 2019

Для этого вам нужно будет использовать .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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...