Docker Alpine: Ошибка загрузки модуля MySQLdb - PullRequest
1 голос
/ 08 мая 2019

Я создаю Alpine изображение приложения Django с MariaDB , и я не могу понять, какую зависимость я должен добавить к своему Dockerfile чтобы мое приложение могло правильно подключаться к БД.

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

Ну, я так и думал. Из того, что я прочитал в этой статье , в это обсуждение , mariadb-dev в Alpine эквивалент default-libmysqlclient-dev в Debian основанная система. Кроме того, пакет mysql-client в Alpine - просто фиктивный пакет (содержащий 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 против MariaDB // Debian против Alpine, я чувствую растерянность. Любое понимание?

1 Ответ

1 голос
/ 10 мая 2019

Кажется, вам не хватает модуля 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
...