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

daolsyd0  于 2022-09-27  发布在  Docker
关注(0)|答案(2)|浏览(251)

我需要将数据从运行在docker中的PostgreSQL容器导入到也运行在docker中的Solr服务器。
在我的docker run命令中,我指定了--link选项,该选项在solr docker容器内创建环境变量$POSTGRESQL_PORT_5432_TCP_ADDR,我需要将其传递给solr,以便在我的solrconfig.xml文件中使用。
我听说,通过将JVM环境变量传递给Solr启动命令,这是可能的,但docker run会自动启动Solr。我找到的唯一解决方法是:

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

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

wz3gfoph

wz3gfoph1#

查看您看到的页面Taking Solr to Production
bin/solr脚本只是在启动期间将以-D开头的选项传递给JVM。对于在生产环境中运行,我们建议在include文件中定义的SOLR_OPTS变量中设置这些属性。继续我们的软提交示例,在/var/solr/solr.in中。sh,您可以这样做:SOLR_OPTS=“$SOLR_OP S-Dsolr.autoSoftCommit.maxTime=10000”
因此,您只需在solr.bin.sh中编辑SOLR_OPTS环境变量。
对于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

如果我想的话。

6mw9ycah

6mw9ycah2#

由于某些原因,solr.in.cmd文件看起来与e1d1e完全相同,这让我对如何在其中设置变量感到困惑。在windows容器中,从dockerfile执行相同操作的命令是:

RUN Add-Content C:\solr\bin\solr.in.cmd 'set SOLR_OPTS=%SOLR_OPTS% -Dsolr.database.ip=%POSTGRESQL_PORT_5432_TCP_ADDR%'

相关问题