当环境变量仅存在于容器内部时,如何将环境变量传递给 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 容器 运行 导入到 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

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

在页面上查看 Taking Solr to Production 你看到了

The bin/solr script simply passes options starting with -D on to the JVM during startup. For running in production, we recommend setting these properties in the SOLR_OPTS variable defined in the include file. Keeping with our soft-commit example, in /var/solr/solr.in.sh, you would do: SOLR_OPTS="$SOLR_OPTS -Dsolr.autoSoftCommit.maxTime=10000"

所以您需要做的就是编辑 solr.bin.sh 中的 SOLR_OPTS 环境变量。

Docker 有点不同,因为您无法直接访问 solr.bin.sh,但经过反复试验后,就像将它添加到我的 [=31] 一样简单=]文件.

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

如果我愿意的话。