Подключите Docker образ с Oracle базой данных на хосте, используя pyodbc - PullRequest
0 голосов
/ 23 января 2020

На моем компьютере запущено приложение, которое обращается к базе данных с помощью pyodb c. Приложение сначала читает из базы данных, а затем записывает повторные результаты обратно в ту же базу данных.

Теперь я хотел бы запустить это приложение таким же образом, но в виде docker - но я не могу понять, как создать соединение между контейнером docker и базой данных.

Вот мой Docker файл (используется информация из здесь ):

FROM python:3.7.3

WORKDIR /usr/src

#add all required contents to directories

ADD results /usr/results
ADD data /usr/data
ADD src /usr/src

COPY drivers/mysql-connector-odbc-5.3.13-linux-ubuntu16.04-x86-64bit.tar.gz .
COPY drivers/oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm .
COPY drivers/oracle-instantclient12.2-odbc-12.2.0.1.0-2.x86_64.rpm .

RUN apt-get update && apt-get install -y --no-install-recommends \
        unixodbc-dev

#unixODBC
RUN apt-get install -y unixodbc-dev unixodbc-bin unixodbc

# The oracle base driver needs this
RUN apt-get install -y libaio1

# Needed to install the oracle .rpm files
RUN apt-get install -y alien

#MySQL ODBC Ansi driver
RUN tar xvzf mysql-connector-odbc-5.3.9-linux-ubuntu16.04-x86-64bit.tar.gz \
    && ./mysql-connector-odbc-5.3.9-linux-ubuntu16.04-x86-64bit/bin/myodbc-installer -d -a -n "MySQL ODBC 5.3 Ansi Driver" \
        -t "DRIVER=/usr/src/app/mysql-connector-odbc-5.3.9-linux-ubuntu16.04-x86-64bit/lib/libmyodbc5a.so"

# Oracle 12.2
# 1. Install the oracle instant client
RUN alien -i oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
RUN alien -i oracle-instantclient12.2-odbc-12.2.0.1.0-2.x86_64.rpm
# 2. Setup the client
ENV LD_LIBRARY_PATH /usr/lib/oracle/12.2/client64/lib/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
# 3. Make sure links are set
RUN ldconfig
# 4. Use the myodbc-installer to install the driver
RUN ./mysql-connector-odbc-5.3.13-linux-ubuntu16.04-x86-64bit/bin/myodbc-installer -d -a -n "Oracle 12.2" -t "DRIVER=/usr/lib/oracle/12.2/client64/lib/libsqora.so.12.1"


#installing libraries
RUN pip install pandas
RUN pip install pyodbc
RUN pip install numpy 
RUN pip install datetime
RUN pip install -U scikit-learn



Строка подключения что я использую в своем скрипте:

DRIVER={Oracle 12.2};UID=****;PWD=***;DSN=***;DBQ=*** ...

Если я запускаю свой скрипт из контейнера, я получаю следующее сообщение об ошибке:

('08004', '[08004] [unixODBC][Oracle][ODBC][Ora]ORA-12154: TNS:could not resolve the connect identifier specified\n (12154) (SQLDriverConnect)'

Я могу найти очень мало информации о том, как подключить изображение docker к базе данных, и любая помощь будет принята с благодарностью :)

Если для ответа на этот вопрос необходима дополнительная информация, пожалуйста, дай мне знать. Заранее большое спасибо

...