Docker Alpine:加载 MySQLdb 模块时出错

zar*_*ski 9 mysql django mariadb docker alpine-linux

我正在使用MariaDB构建Django应用程序的基于Alpine的图像,但我无法弄清楚应该添加哪个依赖项,以便我的应用程序可以正确连接到数据库。Dockerfile

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
Run Code Online (Sandbox Code Playgroud)

好吧,我以为我做到了。从我在这篇文章中读到的,在这个讨论中mariadb-devAlpine中相当于default-libmysqlclient-dev在基于Debian的系统中。此外,Alpine 中的mysql-client 包只是一个虚拟包(包含mariadb-devmariadb-client等)。这是Dockerfile

# pull official base image
FROM python:3.7-alpine

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# set work directory
WORKDIR /usr/src/cms

# install mysqlclient
RUN apk update \
    && apk add --virtual build-deps gcc python3-dev musl-dev \
    && apk add --no-cache mariadb-dev\
    && apk del build-deps

# install dependencies
RUN pip install --upgrade pip
RUN pip install pipenv
COPY ./Pipfile /usr/src/cms/Pipfile
RUN pipenv install --skip-lock --system --dev

# copy entrypoint.sh
COPY ./entrypoint.sh /usr/src/cms/entrypoint.sh

# copy project
COPY . /usr/src/cms/

# run entrypoint.sh
ENTRYPOINT ["/usr/src/cms/entrypoint.sh"]

Run Code Online (Sandbox Code Playgroud)

我尝试添加mariadb-client, 来使用mysql-client。我也尝试添加RUN pip install django-mysql. 似乎什么都没有改变。我成功地构建了Postgres Django 应用程序,没有任何问题,但是,当谈到 MySQl 与 MariaDB // Debian 与 Alpine 时,我感到困惑。任何见解?

val*_*ano 18

您似乎缺少MySQLdbPython 模块,您应该为此安装mysqlclientPython 包:pip install mysqlclient.

在 Alpine 上,pipmysqlclient将从源代码构建,因此您需要gccmusl-dev在此设置步骤中,因此您需要推迟apk del build-deps到安装 Python 模块之后。

修复了 Dockerfile 片段:

RUN apk update \
    && apk add --virtual build-deps gcc python3-dev musl-dev \
    && apk add --no-cache mariadb-dev

...

RUN pip install mysqlclient  

RUN apk del build-deps
Run Code Online (Sandbox Code Playgroud)

  • 唯一必要的依赖项是“mariadb-connector-c”。无需安装庞大的“mariadb-dev”。 (2认同)

Gun*_*jan 7

主要需要安装mariadb-connector-c-dev包。但只有这个包才会出现编译错误。因此,您还需要将 gcc 和 musl-dev 包添加到 Dockerfile 中。这将使 Django 和 MySQL 在 alpine 镜像中工作。

FROM python:3.8-alpine

RUN apk add gcc musl-dev mariadb-connector-c-dev
Run Code Online (Sandbox Code Playgroud)