在 Alpine Linux Docker 容器中安装 ODBC 驱动程序
Posted
技术标签:
【中文标题】在 Alpine Linux Docker 容器中安装 ODBC 驱动程序【英文标题】:Install ODBC driver in Alpine Linux Docker Container 【发布时间】:2019-01-24 01:32:14 【问题描述】:我目前有以下Dockerfile
来创建我的 Docker 映像。
FROM python:3.6.6-alpine3.8
# Add dependencies for Python packages pandas, numpy and pyodbc
RUN apk add --no-cache curl gcc g++ unixodbc-dev
RUN ln -s /usr/include/locale.h /usr/include/xlocale.h
# Project files
ARG PROJECT_DIR=/srv/scripts
RUN mkdir -p $PROJECT_DIR
WORKDIR $PROJECT_DIR
COPY requirements.txt ./
# Install Python dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
我想在此映像中包含各种 ODBC 驱动程序,以便我可以使用它们从运行在我的容器中的 Python 程序连接到不同的数据库。
Python 程序正在使用Pyodbc
连接到数据库。
我需要安装的 ODBC 驱动程序是:
PostgreSQL
mysql
SQL Server 女士
Teradata
甲骨文
蜂巢
黑斑羚
我想从 PostgreSQL 开始,认为它是最简单的,但我在 Alpine Linux Package manager 上找不到任何包。你知道我应该如何安装这样的驱动程序吗?
【问题讨论】:
可能你必须编译它。并非所有东西都可用于 Alpine。 谢谢,我最终使用了 Debian Stretch Linux 映像,以便我可以使用 apt-get 安装东西 根据您的工作,值得坚持使用 Alpine。除非它让你头疼。 @Alexis.Rolland 我看到您的问题仍未得到解答。你找到解决办法了吗?我想做一些非常相似的事情,但只适用于 MS SQL Server。 @Snympi 我使用了以下基本映像而不是 Alpine « python:3.6.6-slim-stretch » 然后我使用了 apt-get ton install 驱动程序。特别是对于 MsSQL,我使用了 FreeTDS。这是我的 Dockerfile:github.com/mobydq/mobydq/blob/master/scripts/Dockerfile 【参考方案1】:我也面临同样的问题。我通过在RUN apk add
命令之前添加RUN apk update
解决了这个问题。(我使用的是python:3.6-alpine)
Dockerfile
FROM python:3.6-alpine
RUN apk update
RUN apk add gcc libc-dev g++ libffi-dev libxml2 unixodbc-dev mariadb-dev postgresql-dev
【讨论】:
酷会试试看!谢谢 你能分享你的整个 Dockerfile 吗?您是否也在 Python 中使用 pyodc 来访问数据库?如果是这样,是否有任何进一步的配置?我也很想把一切都放在一个 Alpine 容器中,但现在不得不求助于 Debian 来完成这一切。仍然想让 Alpine 工作。 @Snympi 我正在使用 pyodbc 连接到数据库。我有大量依赖项(requirements.txt)。所以我不得不回到基于 ubuntu 的图像。当我有它的工作时,我会更新答案。 增加运行步骤数会减慢您的 docker 构建速度,请改用apk -U add
:)【参考方案2】:
如果您关心的是保持轻量级,特别是在 odbc 的情况下,我建议使用 debian:stretch image。
【讨论】:
其实我需要python,所以现在我用的是python:3.6.6-slim-stretch,它比debian:stretch多3Mb左右,所以我觉得我很难做得更好【参考方案3】:随着 OP 最终从 Alpine 迁移到基于 Debian 的映像,并且另一个答案有一个工作 Dockerfile 的小快照,我将充实一个完整的 Dockerfile,它将 SQL Server ODBC Driver 17 构建到基于 Debian 的映像中图片。
# load python 3.8 dependencies using slim debian 10 image.
FROM python:3.8-slim-buster
# build variables.
ENV DEBIAN_FRONTEND noninteractive
# install Microsoft SQL Server requirements.
ENV ACCEPT_EULA=Y
RUN apt-get update -y && apt-get update \
&& apt-get install -y --no-install-recommends curl gcc g++ gnupg unixodbc-dev
# Add SQL Server ODBC Driver 17 for Ubuntu 18.04
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
&& curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list \
&& apt-get update \
&& apt-get install -y --no-install-recommends --allow-unauthenticated msodbcsql17 mssql-tools \
&& echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile \
&& echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
# upgrade pip and install requirements.
COPY /requirements.txt /requirements.txt
RUN pip install --upgrade pip
RUN pip install -r /requirements.txt
# clean the install.
RUN apt-get -y clean
# copy all files to /app directory and move into directory.
COPY . /app
WORKDIR /app
ENTRYPOINT ["some", "python", "command"]
【讨论】:
+1 用于 SQL Server 步骤。更多信息在这里:docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/…以上是关于在 Alpine Linux Docker 容器中安装 ODBC 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章
「容器架构」Debian和 Alpine作为基准Docker映像的对比
Go 编译的二进制文件不会在 Ubuntu 主机上的 alpine docker 容器中运行
Docker openjdk-8-jdk-alpine 容器时间与jdk时区不同修改方法