当环境变量仅存在于容器内时,如何将环境变量传递给在Docker中运行的Solr?

时间:2015-08-19 01:33:55

标签: postgresql solr docker

我需要从在docker中运行的PostgreSQL容器到也在Docker内部运行的Solr服务器执行dataimport。

在我的docker run命令中,我指定--link选项,它在solr docker容器中创建环境变量$POSTGRESQL_PORT_5432_TCP_ADDR,我需要将它传递给Solr以在我的{{{ 1}}文件。

我听说通过将JVM环境变量传递给Solr启动命令可以实现这一点,但是solrconfig.xml会自动启动Solr。我发现的唯一解决方法是执行以下操作:

docker run

使用bin / true启动容器,使其无效,然后

docker run --name solr -d -p 8983:8983 --link postgresql --volumes-from solr_cores makuk66/docker-solr /bin/true

进入容器,最后用旗帜

自己运行solr启动命令
docker exec -it solr /bin/bash

然而,这是一个涉及手动的过程,我想知道是否有更好的方法。

1 个答案:

答案 0 :(得分:1)

在页面Taking Solr to Production上查看

  

bin / solr脚本只是在启动期间将以-D开头的选项传递给JVM。对于在生产中运行,我们建议在包含文件中定义的SOLR_OPTS变量中设置这些属性。保持我们的软提交示例,在/var/solr/solr.in.sh中,您可以:   SOLR_OPTS =" $ SOLR_OPTS -Dsolr.autoSoftCommit.maxTime = 10000"

所以你需要做的就是在-Dsolr.database.ip=$POSTGRESQL_PORT_5432_TCP_ADDR 中编辑SOLR_OPTS环境变量。

Docker有点不同,因为您无法直接访问solr.bin.sh,但经过一些试验和错误后,就像将其添加到我的Dockerfile一样简单。

solr.bin.sh

然后您可以在solrconfig.xml文件中将其用作

RUN echo 'SOLR_OPTS="$SOLR_OPTS -Dsolr.database.ip=$POSTGRESQL_PORT_5432_TCP_ADDR"' >> /opt/solr/bin/solr.in.sh

需要注意的一点是,只要确保不覆盖任何重要内容,就可以随意调用JVM环境变量。我可以称之为

${solr.database.ip}

如果我想。