Установите значения в application.conf с помощью Docker

В моем приложении используется база данных Neo4j, и ее учетные данные определены в файле application.conf, который хранится в папке project_folder / configs. Я создал Dockerfile для проекта вместе с файлом docker-compose, и я хотел бы изменить URL-адрес подключения neo4j в качестве параметра среды в docker-compose. Как я могу изменить значение поля в файле application.conf с помощью docker-compose или Dockerfile?

Вот как выглядит файл конфигурации:

neo4j{
    url= "bolt://localhost:7687"
    user = "user"
    password = "password"
}

файл docker-compose:

version: '3.3'
services:
  neo4j_db:
    image: neo4j:latest
    ports:
      - "7474:7474"
      - "7473:7473"
      - "7687:7687"
    volumes:
      - $HOME/neo4j/import:/var/lib/neo4j/import
      - $HOME/neo4j/data:/neo4j/data
      - $HOME/neo4j/conf:/neo4j/conf
      - $HOME/neo4j/logs:/neo4j/logs
    environment:
      - NEO4J_dbms_active__database=graph.db
  benchmarks:
    image: "image_name"
    volumes:
      - ./:/workdir1
    working_dir: /workdir1
    links:
      - neo4j_db

Dockerfile приложения:

FROM java:8
ENV SCALA_VERSION 2.11.8
ENV SBT_VERSION 1.1.1
ENV SPARK_VERSION 2.2.0
ENV SPARK_DIST spark-$SPARK_VERSION-bin-hadoop2.6
ENV SPARK_ARCH $SPARK_DIST.tgz
ENV NEO4J_CONFIG neo4j_local
ENV BENCHMARK_NAME read_spark_single

WORKDIR /opt

# Install Scala
RUN \
  cd /root && \
  curl -o scala-$SCALA_VERSION.tgz http://downloads.typesafe.com/scala/$SCALA_VERSION/scala-$SCALA_VERSION.tgz && \
  tar -xf scala-$SCALA_VERSION.tgz && \
  rm scala-$SCALA_VERSION.tgz && \
  echo >> /root/.bashrc && \
  echo 'export PATH=~/scala-$SCALA_VERSION/bin:$PATH' >> /root/.bashrc

# Install SBT
RUN \
  curl -L -o sbt-$SBT_VERSION.deb https://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb && \
  dpkg -i sbt-$SBT_VERSION.deb && \
  rm sbt-$SBT_VERSION.deb

# Install Spark
RUN \
    cd /opt && \
    curl -o $SPARK_ARCH http://d3kbcqa49mib13.cloudfront.net/$SPARK_ARCH && \
    tar xvfz $SPARK_ARCH && \
    rm $SPARK_ARCH && \
    echo 'export PATH=$SPARK_DIST/bin:$PATH' >> /root/.bashrc

EXPOSE 9851 9852 4040 7474 7473 7687

VOLUME /workdir1

CMD /workdir1/runapp.sh "$NEO4J_CONFIG" "$BENCHMARK_NAME" 
# docker docker-compose configuration
Источник
Codelisting
за 4 против
Лучший ответ

Для этого есть несколько подходов, но, поскольку вы уже просите сделать это с переменными env, измените application.yaml следующим образом:

neo4j {
    url = "bolt://${HOSTNAME}"
    user = "user"
    password = "password"
}

и установите переменную в docker compose, добавив:

environment:
  - HOSTNAME=localhost:4567 

Это будет работать, пока вы укажете HOSTNAME env. переменная, иначе загрузить конфигурацию приложения не удастся.

Если вы по какой-то причине хотите сохранить значение по умолчанию, используйте это:

neo4j {
    url = "bolt://localhost:4567"
    url = ${?HOSTNAME}
    user = "user"
    password = "password"
}

и передайте правильный HOSTNAME env. переменная с файлом docker-compose. Этот конфиг будет загружен, если он определен; по умолчанию будет выбрано первое значение, если оно не указано.

Для получения подробной информации проверьте: https://github.com/lightbend/config

  • 0
    Должен ли я как-то установить эту переменную среды в моем Dockerfile?
  • 0
    @Cassie нет, docker-compose передаст эту переменную при запуске приложения
Codelisting
Популярные категории
На заметку программисту