error when docker build python django app in alpine linux

Viewed 4521
  1. Dockerfile
FROM python:3.6.5-alpine3.7
WORKDIR /app
ADD . /app
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 10021
CMD ["python", "manage.py", "runserver", "0.0.0.0:10021"]

  1. Requirements

    • openpyxl==2.4.11
    • requests==2.18.4
    • Django==2.0.2
    • mysqlclient==1.3.12

  1. Build Error
Collecting mysqlclient==1.3.12 (from -r requirements.txt (line 4))
  Downloading https://mirrors.aliyun.com/pypi/packages/6f/86/bad31f1c1bb0cc99e88ca2adb7cb5c71f7a6540c1bb001480513de76a931/mysqlclient-1.3.12.tar.gz (89kB)
    Complete output from command python setup.py egg_info:
    /bin/sh: mysql_config: not found
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-er3m_9t6/mysqlclient/setup.py", line 17, in <module>
        metadata, options = get_config()
      File "/tmp/pip-install-er3m_9t6/mysqlclient/setup_posix.py", line 44, in get_config
        libs = mysql_config("libs_r")
      File "/tmp/pip-install-er3m_9t6/mysqlclient/setup_posix.py", line 26, in mysql_config
        raise EnvironmentError("%s not found" % (mysql_config.path,))
    OSError: mysql_config not found

Thank @danblack for mariadb-connector-c-dev which helped me solve the OSError: mysql_config not found error.


  1. New Dockerfile
FROM python:3.6.5-alpine3.7
WORKDIR /app
ADD . /app
RUN apk add --no-cache build-base && apk add --no-cache mariadb-connector-c-dev && pip install --no-cache-dir -r requirements.txt && apk del build-base
EXPOSE 10021
CMD ["python", "manage.py", "runserver", "0.0.0.0:10021"]

  1. New Problem

But a new problem occurred, Docker printed nothing when docker run ... ran, no logs, no errors. It should have printed logs like the following

Performing system checks... 
System check identified no issues (0 silenced). 
September 04, 2018 - 15:56:26 
Django version 2.0.2, using settings 'xxx.settings' 
Starting development server at http://0.0.0.0:10021/ 
Quit the server with CTRL-BREAK.

Can someone show me a complete Dockerfile? Please help! Thank you so much.

3 Answers

You'd need to install the mariadb-connector-c-dev alpine package, which provides mysql_config that the python packages uses to identify which libraries it needs link against.

As per @danblack, mainly you need to install mariadb-connector-c-dev package. But only this package will give compilation errors. So additionally you will need to add gcc and musl-dev packages into Dockerfile. This will make Django and MySQL work within alpine image.

FROM python:3.8-alpine

RUN apk add gcc musl-dev mariadb-connector-c-dev

In my case run with:

FROM python:3.8-alpine

RUN apk add mysql mysql-client gcc musl-dev mariadb-connector-c-dev

Adding mysql and mysql-client

Related