pyodbc не работает в контейнере веб-службы, Azure Model Management
Я пытаюсь создать веб-сервис с помощью Azure Model Management и борюсь с трудностями.
Я следовал инструкциям и сумел запустить локально в контейнере Docker. Мой файл "Score.py" включает в себя запрос к базе данных SQL с использованием pyodbc. Это прекрасно работает, когда я тестирую это в своей локальной среде с использованием ML Workbench, однако, как только он был развернут в контейнере Docker, я сталкиваюсь с этой ошибкой:
'Response Content': b'(\'01000\', "[01000] [unixODBC][Driver Manager]Can\'t open lib \'ODBC Driver 13 for SQL Server\' : file not found (0) (SQLDriverConnect)")'
Я включил pyodbc в мой conda_dependencies.yml.
У кого-нибудь есть предложения? Есть ли какие-либо дополнительные зависимости, которые мне нужно включить?
Похоже, что Azure недавно добавила возможность настраивать образы контейнеров, используя то, что они называют "Файл шагов Docker". У меня практически нет опыта в Docker, но после прочтения этого вопроса я попытался включить "Файл шагов Docker", содержащий это:
ADD odbcinst.ini /etc/odbcinst.ini
RUN apt-get update
RUN apt-get install -y tdsodbc unixodbc-dev
RUN apt install unixodbc-bin -y
RUN apt-get clean -y
Однако я понимаю, что команды "ДОБАВИТЬ" в этом типе файлов невозможны, поэтому, похоже, это не имеет значения.
Надеюсь, это все имеет смысл! Любой совет будет очень признателен! Надеюсь, я не единственный, кто спотыкается о Azure ML!
РЕДАКТИРОВАТЬ:
Я все еще застрял, но делаю успехи...
Я получил доступ к корню контейнера, используя:
docker exec -ti -u root container_name bash
Отсюда я запустил 'odbcinst -j`, в результате чего:
unixODBC 2.3.6
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
Я не мог найти odbc.ini
поэтому я следовал этим инструкциям для установки ODBC Driver 13 для Ubuntu 16.04. Теперь, когда я запускаю сервис, я получаю другую ошибку:
{'Error': MlCliError({'Error': 'Error occurred while attempting to score service myapp.', 'Response Code': 502, 'Response Content': b'<html>\r\n<head><title>502 Bad Gateway</title></head>\r\n<body bgcolor="white">\r\n<center><h1>502 Bad Gateway</h1></center>\r\n<hr><center>nginx/1.10.3 (Ubuntu)</center>\r\n</body>\r\n</html>\r\n', 'Response Headers': {'Content-Length': '182', 'Content-Type': 'text/html', 'Date': 'Wed, 18 Apr 2018 14:06:30 GMT', 'Server': 'nginx/1.10.3 (Ubuntu)', 'Connection': 'keep-alive'}},), 'Azure-cli-ml Version': '0.1.0b2'}
Я также попытался изменить свой файл Score.py для возвращения: pyodbc.drivers()
это приводит к пустому "[]"