我正在使用 MariaDB 构建 Django 应用程序的基于 Alpine 的映像,但我不知道应该添加哪个依赖项我的Dockerfile
,以便我的应用可以正确连接到数据库。
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
好吧,我以为我做到了。根据我读到的in this article,在this discussion中,mariadb-dev
在 Alpine 中与基于 Debian 的default-libmysqlclient-dev
系统。此外,Alpine中的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时,我感到困惑。有见识吗?
答案 0 :(得分:1)
似乎您缺少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
答案 1 :(得分:0)
主要是你需要安装 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