scala - 使用 Docker 在 application.conf 中设置值

标签 scala docker configuration docker-compose

我的应用程序中使用了 Neo4j 数据库,其凭据在 application.conf 文件中定义,该文件存储在 project_folder/configs 中。我已经为该项目创建了一个 Dockerfile 以及 docker-compose 文件,我想将 neo4j 连接 URL 更改为 docker-compose 中的环境参数。如何使用 docker-compose 或 Dockerfile 更改 application.conf 文件中的字段值?

配置文件如下所示:

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" 

最佳答案

有多种方法可以执行此操作,但由于您已经要求使用环境变量来执行此操作,请更改 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"
}

并传递正确的主机名环境。带有 docker-compose 文件的变量。如果定义了此配置,则会拾取它;如果未提供,将默认为第一个值。

详细信息请查看: https://github.com/lightbend/config

关于scala - 使用 Docker 在 application.conf 中设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50910924/

相关文章:

Scala 相当于 Python 的 "in"集合运算符?

scala - 如何在 Spark 中定义一个由所有工作人员共享的全局 scala 变量?

java - java 中的 finagle - Function、Function1 等

docker - 如何在特定节点上创建docker服务,同时在集群中将其扩展到其他节点?

linux - 在 CentOS 上从 .tar.gz 文件批量安装 RPM 包

.net - app.config 文件和 XYZ.settings 文件有什么区别?

scala - Scala 中的条件编译

docker - Docker-Compose:是否可以在不同容器上强制使用IP地址?

git - Heroku 错误 : "Permission denied (public key)"

configuration - 是否可以为每个网站而不是全局设置 Piwik 的“请勿跟踪”功能?