我正在尝试通过 Azure 模型管理创建 Web 服务并且正在苦苦挣扎。
我已按照说明进行操作,并设法在 Docker 容器中进行本地操作。我的“score.py”文件包含使用 pyodbc 对 SQL 数据库的查询。当我使用 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
,所以我按照这些说明为 Ubuntu 16.04 安装“ODBC 驱动程序 13”。现在,当我运行该服务时,我得到了一个不同的错误:
{'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()
这会导致空白 '[]'