I have encountered a problem while trying to run my django project on a new Docker container. It is my first time using Docker and I can’t seem to find a good way to run a django project on it. Having tried multiple tutorials, I always get the error about psycopg2 not being installed.
requirements.txt:
-i https://pypi.org/simple asgiref==3.2.7 django-cors-headers==3.3.0 django==3.0.7 djangorestframework==3.11.0 gunicorn==20.0.4 psycopg2-binary==2.8.5 pytz==2020.1 sqlparse==0.3.1
Dockerfile:
# pull official base image FROM python:3.8.3-alpine # set work directory WORKDIR /usr/src/app # set environment variables ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 # install dependencies RUN pip install --upgrade pip COPY ./requirements.txt . RUN pip install -r requirements.txt # copy project COPY . . # set project environment variables # grab these via Python's os.environ # these are 100% optional here ENV PORT=8000 ENV SECRET_KEY_TWITTER = "***"
While running docker-compose build, I get the following error:
Error: pg_config executable not found. pg_config is required to build psycopg2 from source. Please add the directory containing pg_config to the $PATH or specify the full executable path with the option: python setup.py build_ext --pg-config /path/to/pg_config build ... or with the pg_config option in 'setup.cfg'. If you prefer to avoid building psycopg2 from source, please install the PyPI 'psycopg2-binary' package instead.
I will gladly answer any questions that might lead to the solution. Also, maybe someone can recommend me a good tutorial on dockerizing django apps?
Advertisement
Answer
On Alpine Linux, you will need to compile all packages, even if a pre-compiled binary wheel is available on PyPI. On standard Linux-based images, you won’t (https://pythonspeed.com/articles/alpine-docker-python/ – there are also other articles I’ve written there that might be helpful, e.g. on security).
So change your base image to python:3.8.3-slim-buster
or python:3.8-slim-buster
and it should work.