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

Postgresql 当环境变量仅存在于容器内部时,如何将环境变量传递给Docker内部运行的Solr?,postgresql,solr,docker,Postgresql,Solr,Docker,我需要从docker内部运行的PostgreSQL容器向docker内部运行的Solr服务器进行数据导入 在我的docker run命令中,我指定了--link选项,该选项在solr-docker容器中创建环境变量$POSTGRESQL\u-PORT\u 5432\u-TCP\u-ADDR,我需要将其传递到solr中,以便在我的solrconfig.xml文件中使用 我听说可以通过将JVM环境变量传递给Solr startup命令来实现这一点,但是docker run会自动启动Solr。我发现的

我需要从docker内部运行的PostgreSQL容器向docker内部运行的Solr服务器进行数据导入

在我的
docker run
命令中,我指定了
--link
选项,该选项在solr-docker容器中创建环境变量
$POSTGRESQL\u-PORT\u 5432\u-TCP\u-ADDR
,我需要将其传递到solr中,以便在我的
solrconfig.xml
文件中使用

我听说可以通过将JVM环境变量传递给Solr startup命令来实现这一点,但是
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 startup命令

-Dsolr.database.ip=$POSTGRESQL_PORT_5432_TCP_ADDR
然而,这是一个复杂的手动过程,我想知道是否有更好的方法。

查看您看到的页面

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

因此,您只需在
SOLR.bin.sh
中编辑SOLR\u 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
如果我想的话