在 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时区不同修改方法

无法在基于 Alpine 的 Docker 容器中运行 Play 框架应用程序

在 Docker Alpine 容器中启动 shell

在 Alpine Docker 容器中运行 OpenSSH