通过环境变量配置docker容器的solr数据导入
Configure solr's dataimport of docker container by enviroments variables
我们需要将 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 图像,并添加了一个特殊的 append.solr.sh 附加到 /opt/solr/bin/solr.in.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
Docker 文件
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"
您可以在 dataimport 配置文件中访问 JVM 系统属性,并且可以通过环境变量 SOLR_OPTS
设置系统属性,如 here.
所述
Any JVM System properties, usually specified using the -D
flag when starting the JVM, can be used as variables in any XML configuration file in Solr.
In general, any Java system property that you want to set can be passed through the bin/solr script using the standard -Dproperty=value
syntax. Alternatively, you can add common system properties to the SOLR_OPTS environment variable defined in the Solr include file (bin/solr.in.sh
or bin/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"
我们需要将 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 图像,并添加了一个特殊的 append.solr.sh 附加到 /opt/solr/bin/solr.in.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
Docker 文件
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"
您可以在 dataimport 配置文件中访问 JVM 系统属性,并且可以通过环境变量 SOLR_OPTS
设置系统属性,如 here.
Any JVM System properties, usually specified using the
-D
flag when starting the JVM, can be used as variables in any XML configuration file in Solr.
In general, any Java system property that you want to set can be passed through the bin/solr script using the standard
-Dproperty=value
syntax. Alternatively, you can add common system properties to the SOLR_OPTS environment variable defined in the Solr include file (bin/solr.in.sh
orbin/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"