通过环境变量配置 solr 的数据导入 docker 容器



我们需要将 solr 切换到 docker 容器。在内核的数据配置中,我们有这样的配置:

<dataSource type="JdbcDataSource"
driver="org.postgresql.Driver"
url="${dataimporter.request.db_url}"
user="${dataimporter.request.db_user}"
password="${dataimporter.request.db_pass}" />

在 solrconfig 中.xml

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
<str name="db_url">@db.jdbcurl@</str>
<str name="db_user">@db.username@</str>
<str name="db_pass">@db.pass@</str>
</lst>
</requestHandler>

@...@变量是从 maven 属性设置的。你能告诉我如何在 docker 撰写文件中传递@...@变量的值吗?

谢谢。

为了解决这个问题,我准备了自己的solr图像,并添加了一个附加到/opt/solr/bin/solr.in.sh的特殊 append.solr.sh。内核使用我在数据源部分的 append.solr.sh 中定义的 java 属性。


我准备了一个 append.solr.sh 文件:

# Our specific configs.
EXTRA_OPTIONS="-Djava.system.database=$DB_TARGET -Djava.system.dbport=$DB_PORT -Djava.system.dbuser=$DB_USERNAME -Djava.system.dbpass=$DB_PASSWORD"
SOLR_OPTS="$SOLR_OPTS $EXTRA_OPTIONS"
FROM solr
EXPOSE 8983
USER root
COPY append.solr.sh /append.solr.sh
RUN cat /append.solr.sh >> /opt/solr/bin/solr.in.sh 
&& rm /append.solr.sh
COPY --chown=solr:solr cores /opt/solr/server/solr/mycores
USER solr
WORKDIR /opt/solr
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["solr-foreground"]

修改了我的核心的数据源,如下所示:

<dataSource
type="JdbcDataSource"
driver="com.sap.db.jdbc.Driver"
url="jdbc:sap://${java.system.database}:${java.system.dbport}"
user="${java.system.dbuser}"
password="${java.system.dbpass}" />

并将我的 docker-compose.yml 更改为如下所示:

version: '3.7'
services:
search:
image: mysolr:latest
container_name: mysolr
build:
context: ./search
dockerfile: Dockerfile
environment:
- DB_TARGET
- DB_PORT
- DB_USERNAME
- DB_PASSWORD

最后,我生成一个包含这些变量的.env文件。


编辑- 匹配您的设置的替代解决方案:

docker-compose.yml

version: "3.6"
services:
postgres:
image: postgres:11-alpine
ports:
- "5435:5432"
environment:
- POSTGRES_DB=${ENV_DB}
- POSTGRES_USER=${ENV_PASS}
- POSTGRES_PASSWORD=${ENV_USER}
volumes:
- ./etc/db-init/ddl.sql:/docker-entrypoint-initdb.d/1-ddl.sql
- ./etc/db-init/dml.sql:/docker-entrypoint-initdb.d/2-dml.sql
- pg_data:/var/lib/postgresql/data
solr:
build: ./etc/.
ports:
- "8983:8983"
environment:
- db_url=${ENV_JDBC}
- db_user=${ENV_USER}
- db_password=${ENV_PASS}
volumes:
- solr_data:/var/solr/data
depends_on:
- postgres
volumes:
pg_data:
solr_data:

.env

ENV_USER=os
ENV_PASS=heslo
ENV_DB=os
ENV_JDBC=jdbc:postgresql://localhost:5432/os

Dockerfile

FROM solr:8.2
USER root
COPY pgdriver/postgresql-42.2.8.jar /opt/solr/dist/
COPY solr/ /opt/solr/server/solr/ 
CMD "/opt/solr/bin/solr start -Ddb_url=$db_url -Ddb_user=$db_user -Ddb_password=$db_password -s /opt/solr/server/solr -f -force"

您可以在数据导入配置文件中访问 JVM 系统属性,并且可以通过环境变量SOLR_OPTS设置系统属性,如此处所述。

任何 JVM

系统属性(通常在启动 JVM 时使用-D标志指定(都可以用作 Solr 中任何 XML 配置文件中的变量。

通常,要设置的任何 Java 系统属性都可以使用标准-Dproperty=value语法通过 bin/solr 脚本传递。或者,您可以将公共系统属性添加到 Solr 包含文件中定义的SOLR_OPTS环境变量(bin/solr.in.shbin/solr.in.cmd(

所以你实际上不需要编写自己的 Dockerfile,而只需使用 solr 映像并像这样设置环境变量SOLR_OPTS

SOLR_OPTS="-Ddataimporter.request.db_url=$DB_URL -Ddataimporter.request.db_user=$DB_USER -Ddataimporter.request.db_pass=$DB_PASSWORD"

最新更新