代码之家  ›  专栏  ›  技术社区  ›  Cassie

使用docker在application.conf中设置值

  •  1
  • Cassie  · 技术社区  · 6 年前

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

    以下是配置文件的外观:

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

    Docker撰写文件:

    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
    

    应用程序摘要文件:

    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" 
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   Hüseyin Zengin    6 年前

    有多种方法可以做到这一点,但由于您已经要求使用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"
    }
    

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

    有关详细信息,请检查: https://github.com/lightbend/config