Docker Alpine:加载 MySQLdb 模块时出错
Docker Alpine: Error loading MySQLdb module
我正在使用 MariaDB 构建基于 Alpine 的 Django 应用程序图像,我无法弄清楚我应该将哪个依赖项添加到我的 Dockerfile
中,以便我的应用程序可以正确连接到数据库。
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
好吧,我想我做到了。据我所读,Alpine 中的 in this article, in this discussion, mariadb-dev
is in Alpine the equivalent of default-libmysqlclient-dev
in Debian based system. Furthermore, the mysql-client package 只是一个虚拟包(包含 mariadb-dev、mariadb-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
,因此此设置步骤需要 gcc
和 musl-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
主要是你需要安装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
我正在使用 MariaDB 构建基于 Alpine 的 Django 应用程序图像,我无法弄清楚我应该将哪个依赖项添加到我的 Dockerfile
中,以便我的应用程序可以正确连接到数据库。
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
好吧,我想我做到了。据我所读,Alpine 中的 in this article, in this discussion, mariadb-dev
is in Alpine the equivalent of default-libmysqlclient-dev
in Debian based system. Furthermore, the mysql-client package 只是一个虚拟包(包含 mariadb-dev、mariadb-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
,因此此设置步骤需要 gcc
和 musl-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
主要是你需要安装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