2015-01-26 2 views
0

В настоящее время я пытаюсь подключиться к докерной ссылке между моим контейнером app и db. Я проверил мой контейнер приложения, и переменные окружения автоматически устанавливаются, когда я связываю контейнеры вместе.Передача переменных окружения через jar-файл, который использует приложение

Что я хочу сделать для моего файла конфигурации, который упакован в файл jar, чтобы получить переменные окружения и установить для него требуемые значения. Любые советы или помощь?

My environment variables in the scala app container to connect to MySQL database in another container

И это, как создать конфигурационный файл в моем файле баночки для подключения к MySQL

database { url="jdbc:mysql://${MYSQL_PORT_3306_TCP_ADDR}:${MYSQL_PORT_3306_TCP_PORT}/mydb" driver="com.mysql.jdbc.Driver"} 
+0

Можете ли вы предоставить некоторые детали переменных окружения, мы говорим здесь. Возможно, с некоторым фрагментом. –

+0

Вы хотите обновить файл на своем изображении в соответствии со средой выполнения? Это кажется немного назад, так как файл будет создан при создании изображения. Вы можете передавать переменные среды в ваш Java * процесс *. – Thilo

+0

Я подключаю свое приложение scala к MySQL db, используя переменные среды, как вы можете видеть из приведенного выше рисунка. Переменные среды будут устанавливать адрес порта из IP-адреса контейнера БД вместе с портом 3306. Порт 3306 открывается из образа MySQL, прежде чем я его создам. – Hans

ответ

2

Обновление файла конфигурации внутри кувшина может быть весьма излишним. Это думаю, что у вас есть несколько вариантов

  • чтения переменной конфигурации среды непосредственно в программировании
    • использовать переменную либо непосредственно или сгенерировать конфигурационный файл там
  • создать стартовый сценарий (подробности этого зависит как вы это делаете, sh/bash для linux и т. д.)
    • этот скрипт может генерировать новый файл конфигурации из среды и помещать его в classpath перед jar, поэтому yo u программа видит это.

EDIT: добавлен пример

Вы можете сохранить этот вид пусковой установки скрипта на Docker изображение, которое динамически создает конфигурацию перед запуском самой программы.

#!/bin/bash 

# some default values for testing even without links to other container 
MYSQL_PORT_3306_TCP_ADDR=${MYSQL_PORT_3306_TCP_ADDR:-127.0.0.1} 
MYSQL_PORT_3306_TCP_PORT=${MYSQL_PORT_3306_TCP_PORT:-3306} 

cat <<EOF> /opt/yourprogram/dbconfig.conf 
database { url="jdbc:mysql://${MYSQL_PORT_3306_TCP_ADDR}:${MYSQL_PORT_3306_TCP_PORT}/mydb" driver="com.mysql.jdbc.Driver" 
} 
EOF 

scala -classpath /opt/yourprogram YourProgram 
+0

У вас есть образец сценария Linux, на который я могу ссылаться для второго варианта? Я не так хорош в написании сценариев. – Hans

+0

Добавлен простой пример. Я не знал, как вы запускаете программу или как должно выглядеть имя файла, но, может быть, вы все равно получите идею. – ikettu

+0

Я редактировал свой пост. – Hans

1

То, что я сделал, что я написал файл ш в моем каталоге /tmp/restcore-1.0-SNAPSHOT/bin так:

#!/bin/bash echo "database{url="jdbc:mysql://"${MYSQL_PORT_3306_TCP_ADDR}":"${MYSQL_PORT_3306_TCP_PORT}"/mydb" driver="com.mysql.jdbc.Driver" }" > myconf.conf 

    jar uf /tmp/restcore-SNAPSHOT/lib/com.organization.restcore-1.0-SNAPSHOT.jar /tmp/restcore-1.0-SNAPSHOT/bin/myconf.conf 

После построения Dockerfile и запустив файл ш в CMD, я использую cat myconf.conf для проверки файла конфигурации, и я смогу увидеть набор окружения.

Смежные вопросы