mysql - docker Alpine : Error loading MySQLdb module

标签 mysql django docker mariadb alpine-linux

我正在使用 MariaDB 构建一个基于 AlpineDjango 应用程序图像,但我不知道应该添加哪个依赖项我的 Dockerfile 以便我的应用程序可以正确连接到数据库。

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?

好吧,我想我做到了。从我读到的in this article , 在 this discussion , mariadb-devAlpine 中相当于 default-libmysqlclient-dev 在基于 Debian 的系统中。此外,mysql-client package在 Alpine 中只是一个虚拟包(包含 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"]

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

最佳答案

您似乎缺少 MySQLdb Python 模块,为此您应该安装 mysqlclient Python 包:pip install mysqlclient

在 Alpine 上,pip 将从源代码构建 mysqlclient,因此您需要 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

关于mysql - docker Alpine : Error loading MySQLdb module,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56048631/

相关文章:

docker 多阶段构建 Go 镜像 - x509 : certificate signed by unknown authority

Docker容器桥接接口(interface)分配IP地址

docker - 按照入门 : Stack server stuck loading page endlessly

MySQL 显示空或空表列

c# - 为什么 MySQL Connector.NET 无法正确地将类型映射到 C# 类型?

python - Mongoengine ...查询不在 ListField 中的内容?

python - Django-tables2:如何使用访问器引入外部列?

mysql - 通过比较总状态与指定状态来检索 id 列表

mysql - 如何将 WHERE 子句的多个值作为单个参数传递

python - 根据单词重复增加模型整数字段