繁体   English   中英

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

[英]How do you pass an environment variable to Solr running inside Docker when the environment variable only exists inside the container?

我需要从在 docker 内运行的 PostgreSQL 容器到也在 ZC5FD214CDD0D2BBAC5B427 内运行的 Solr 服务器进行数据导入。

In my docker run command I specify the --link option which creates the environment variable $POSTGRESQL_PORT_5432_TCP_ADDR inside the solr docker container, and I need to pass this into Solr to use in my solrconfig.xml file.

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

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

用 bin/true 启动容器,所以它什么都不做,然后

docker exec -it solr /bin/bash

进入容器,最后用标志自己运行 solr 启动命令

-Dsolr.database.ip=$POSTGRESQL_PORT_5432_TCP_ADDR

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

在查看将Solr投入生产页面上,您会看到

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

因此,所有你需要做的是在编辑SOLR_OPTS环境变量solr.bin.sh

对于Docker来说有点不同,因为您没有直接访问solr.bin.sh ,但是经过反复试验后,将其添加到我的Dockerfile一样容易。

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

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

${solr.database.ip}

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

-Dsolr.potato

如果我想。

太好了谢谢。 由于某种原因,solr.in.cmd 文件看起来与 solr.in.sh 完全相同,这让我对如何在那里设置变量感到困惑。 在 windows 容器中,完成相同操作的命令(来自 dockerif 文件)将是:

RUN 添加内容 C:\solr\bin\solr.in.cmd 'set SOLR_OPTS=%SOLR_OPTS% -Dsolr.database.ip=%POSTGRESQL_PORT_5432_TCP_ADDR%'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM