我需要从在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
然而,这是一个涉及手动的过程,我想知道是否有更好的方法。
答案 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}
如果我想。