在Alpine Linux Docker容器中安装ODBC驱动程序

21

我目前有以下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
    • Ms SQL Server
    • Teradata
    • Oracle
    • Hive
    • Impala
我想从PostgreSQL开始,认为这可能是最简单的,但我在Alpine Linux Package manager上找不到任何软件包。你有什么想法应该如何安装这样的驱动程序吗?

可能你需要编译它。并不是所有的东西都适用于Alpine系统。 - Paulo Pedroso
谢谢,我最终使用了Debian Stretch Linux镜像,这样我就可以用apt-get安装东西。 - Alexis.Rolland
根据你的需求,坚持使用Alpine可能是值得的。除非它给你带来太多麻烦。 - Paulo Pedroso
1
@Alexis.Rolland,我看到你的问题仍未得到答复。你找到解决方案了吗?我想做类似的事情,但只针对MS SQL Server。 - Snympi
1
@Snympi 我使用了以下基础镜像而不是Alpine“python:3.6.6-slim-stretch”,然后我使用apt-get安装了驱动程序。特别是对于MsSQL,我使用了FreeTDS。这是我的Dockerfile:https://github.com/mobydq/mobydq/blob/master/scripts/Dockerfile - Alexis.Rolland
3个回答

25

我遇到了同样的问题。我通过在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

好的,我会试试看!谢谢。 - Alexis.Rolland
2
请问您能否分享整个Dockerfile文件?您是否也在Python中使用pyodbc来访问数据库?如果是的话,是否需要进一步配置?我也很想在Alpine容器中运行所有内容,但目前不得不使用Debian来使其正常运行。仍然希望能够让Alpine正常工作。 - Snympi
2
@Snympi 我之前使用 pyodbc 连接数据库。但是我有很多依赖项(requirements.txt),所以我不得不回到基于 Ubuntu 的镜像上。等我调通了,我会更新答案的。 - Shubham Patel
增加运行步骤的数量会减慢您的Docker构建速度,请改用apk -U add :) - JohannesB

13

由于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"]

3
赞成使用 SQL Server 步骤。更多信息请点击以下链接: https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15 - Andrew
2
这最终对我起作用了,谢谢 :) - nlhnt
1
@m.b,你的回答缺少了MS文档的一部分。他们没有提到导出路径应该是Debian的。你的代码对我也起作用了,谢谢! https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver16#17 - ihsany

0

如果您关注轻量级,特别是在ODBC的情况下,我建议使用Debian:stretch镜像。


1
实际上我需要Python,所以现在我正在使用python:3.6.6-slim-stretch版本,它比debian:stretch多约3Mb,所以我认为我几乎无法做得更好了。 - Alexis.Rolland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接