Докер Pentaho MySQL драйвер проблема
Я использую Docker в Windows 10, чтобы создать образы pentaho и mysql, которые будут работать как контейнеры в сети, которую я определяю с помощью docker network create.
Намерение состоит в том, чтобы (в качестве первого шага) я запустил файл.KTR с pan.sh, который будет считывать параметры подключения к БД из файла.csv и помещать их в среду;
Получить параметры подключения к БД
Затем второй.KTR проверяет, существует ли БД, используя приведенные выше параметры среды;
Проблема в том, что когда я "раскручиваю" свой проект с помощью docker-compose, второй шаг завершается неудачно с драйвером, который не найден. Я поместил драйверы, которые мне нужны, в директорию lib контейнера pentaho, но я предполагаю, что это неправильно?
В конечном счете, цель состоит в том, чтобы преобразование происходило тогда, когда данные, считанные из базы данных OpenEdge, обрабатываются через серию шагов в Пентахо и записываются в базу данных mysql.
Вот вспомогательные файлы; Dockerfile;
FROM java:8-jre
MAINTAINER M Beynon
# Set required environment vars
ENV PDI_RELEASE=7.1 \
PDI_VERSION=7.1.0.0-12 \
CARTE_PORT=8181 \
PENTAHO_JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 \
PENTAHO_HOME=/home/pentaho
# Create user
RUN mkdir ${PENTAHO_HOME} && \
groupadd -r pentaho && \
useradd -s /bin/bash -d ${PENTAHO_HOME} -r -g pentaho pentaho && \
chown pentaho:pentaho ${PENTAHO_HOME}
# Add files
RUN mkdir $PENTAHO_HOME/docker-entrypoint.d
COPY docker-entrypoint.sh $PENTAHO_HOME/scripts/
RUN chown -R pentaho:pentaho $PENTAHO_HOME
RUN apt-get update && apt-get install -y libwebkitgtk-1.0-0
RUN apt-get update && apt-get install -y dos2unix
RUN dos2unix $PENTAHO_HOME/scripts/docker-entrypoint.sh && apt-get --purge remove -y dos2unix && rm -rf /var/lib/apt/lists/*
# Switch to the pentaho user
USER pentaho
# Download PDI
RUN /usr/bin/wget \
--progress=dot:giga \
http://downloads.sourceforge.net/project/pentaho/Data%20Integration/${PDI_RELEASE}/pdi-ce-${PDI_VERSION}.zip \
-O /tmp/pdi-ce-${PDI_VERSION}.zip && \
/usr/bin/unzip -q /tmp/pdi-ce-${PDI_VERSION}.zip -d $PENTAHO_HOME && \
rm /tmp/pdi-ce-${PDI_VERSION}.zip
ENV KETTLE_HOME=$PENTAHO_HOME/data-integration \
PATH=$KETTLE_HOME:$PATH
WORKDIR $KETTLE_HOME
ENTRYPOINT ["../scripts/docker-entrypoint.sh"]
Точка входа;
#!/bin/bash
# based on https://github.com/aloysius-lim/docker-pentaho-di/blob/master/docker/Dockerfile
#exit script if any command fails (non-zero value)
set -e
cd resources
cp mysql-connector-java-5.1.42-bin.jar ../lib/
cp PROGRESS_DATADIRECT_JDBC_OE_ALL.jar ../lib
cd ../
echo 'Drivers copied!'
echo ''
echo 'Running transformation!'
#run a transformation (get db credentials)
./pan.sh -file=resources/Read-DBs.ktr
#run a transformation (does the db exist)
./pan.sh -file=resources/GoldBi-Exists.ktr
#redirect input variables
exec "$@"
Файл составления Docker;
version: "2"
services:
db:
image: mysql:latest
networks:
- my-pdi-network
environment:
- MYSQL_ROOT_PASSWORD=tbitter
- MYSQL_DATABASE=mysql-db
ports:
- "3307:3306"
volumes:
- ./goldbi:/var/lib/mysql
pdi:
image: my-pdi-image:latest
networks:
- my-pdi-network
volumes:
- C:\Docker-Pentaho\resource:/home/pentaho/data-integration/resources
networks:
my-pdi-network:
The error coming from pentaho;
2017/05/30 15:28:56 - Table exists.0 - Error occurred while trying to connect to the database
2017/05/30 15:28:56 - Table exists.0 -
2017/05/30 15:28:56 - Table exists.0 - Error connecting to database: (using class org.gjt.mm.mysql.Driver)
2017/05/30 15:28:56 - Table exists.0 - Communications link failure
2017/05/30 15:28:56 - Table exists.0 -
2017/05/30 15:28:56 - Table exists.0 - The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Большое спасибо.
PS Кто-нибудь знает, как запретить сборке перестраивать все, даже если это всего лишь небольшое изменение файла dockerfile или точки входа?
1 ответ
Кажется, я нашел решение; Были две проблемы. Первое, кажется, что переменные ENV, установленные в первом преобразовании, не используются во втором преобразовании. Вторым было то, что имя хоста было неправильным во втором преобразовании (DB-Exists). Это должно было быть 'db' - это имя, указанное для контейнера в файле docker-compose. Поскольку оба содержимого работают в указанной пользователем сети, они могут автоматически "общаться" друг с другом через имена своих служб... обратный DNS?