Настроить импорт данных в docker контейнере с помощью переменных окружения - PullRequest
1 голос
/ 11 октября 2019

нам нужно переключить наш 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?

Спасибо.

1 Ответ

1 голос
/ 11 октября 2019

Для решения этой проблемы я подготовил собственное изображение solr и добавил специальный файл append.solr.sh, который добавляется к /opt/solr/bin/solr.in.sh. Ядра используют свойства java, которые я определил в append.solr.sh в части dataSource.


Я подготовил файл 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...