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-dev在Alpine中相当于default-libmysqlclient-dev在基于Debian的系统中。此外,Alpine 中的mysql-client 包只是一个虚拟包(包含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"]
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将从源代码构建,因此您需要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
Run Code Online (Sandbox Code Playgroud)
主要需要安装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)
| 归档时间: |
|
| 查看次数: |
6641 次 |
| 最近记录: |