Как создать контейнер Django?

Пытаюсь создать контейнер Django, но при построении проекта, он выдает следующую не понятную ошибку:

$ docker-compose build
Building web
Sending build context to Docker daemon 57.4MB
Step 1/8 : FROM python:3.8.6-alpine
---> 1e00421e959c
Step 2/8 : WORKDIR /usr/src/app
---> Using cache
---> 64769a8a5a7a
Step 3/8 : ENV PYTHONDONTWRITEBYTECODE 1
---> Using cache
---> 80181e8b0989
Step 4/8 : ENV PYTHONUNBUFFERED 1
---> Using cache
---> dce97dede377
Step 5/8 : RUN pip install --upgrade pip
---> Using cache
---> f7c1a747d22e
Step 6/8 : COPY ./requirements.txt .
---> 1e4c8cbbd605
Step 7/8 : RUN pip install -r requirements.txt
---> Running in c341c416b3d5
Collecting asgiref==3.6.0
Downloading asgiref-3.6.0-py3-none-any.whl (23 kB)
Collecting Django==4.1.7
Downloading Django-4.1.7-py3-none-any.whl (8.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1/8.1 MB 2.3 MB/s eta 0:00:00
Collecting sqlparse==0.4.3
Downloading sqlparse-0.4.3-py3-none-any.whl (42 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 42.8/42.8 kB 453.9 kB/s eta 0:00:00
Collecting backports.zoneinfo
Downloading backports.zoneinfo-0.2.1.tar.gz (74 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 74.1/74.1 kB 657.4 kB/s eta 0:00:00
Installing build dependencies: started
Installing build dependencies: finished with status 'done'
Getting requirements to build wheel: started
Getting requirements to build wheel: finished with status 'done'
Preparing metadata (pyproject.toml): started
Preparing metadata (pyproject.toml): finished with status 'done'
Building wheels for collected packages: backports.zoneinfo
Building wheel for backports.zoneinfo (pyproject.toml): started
Building wheel for backports.zoneinfo (pyproject.toml): finished with status 'error'
error: subprocess-exited-with-error

× Building wheel for backports.zoneinfo (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [39 lines of output]
/tmp/pip-build-env-fbrlulb1/overlay/lib/python3.8/site-packages/setuptools/config/setupcfg.py:516: SetuptoolsDeprecationWarning: The license_file parameter is deprecated, use license_files instead.
warnings.warn(msg, warning_class)
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-cpython-38
creating build/lib.linux-x86_64-cpython-38/backports
copying src/backports/__init__.py -> build/lib.linux-x86_64-cpython-38/backports
creating build/lib.linux-x86_64-cpython-38/backports/zoneinfo
copying src/backports/zoneinfo/__init__.py -> build/lib.linux-x86_64-cpython-38/backports/zoneinfo
copying src/backports/zoneinfo/_tzpath.py -> build/lib.linux-x86_64-cpython-38/backports/zoneinfo
copying src/backports/zoneinfo/_version.py -> build/lib.linux-x86_64-cpython-38/backports/zoneinfo
copying src/backports/zoneinfo/_common.py -> build/lib.linux-x86_64-cpython-38/backports/zoneinfo
copying src/backports/zoneinfo/_zoneinfo.py -> build/lib.linux-x86_64-cpython-38/backports/zoneinfo
running egg_info
writing src/backports.zoneinfo.egg-info/PKG-INFO
writing dependency_links to src/backports.zoneinfo.egg-info/dependency_links.txt
writing requirements to src/backports.zoneinfo.egg-info/requires.txt
writing top-level names to src/backports.zoneinfo.egg-info/top_level.txt
reading manifest file 'src/backports.zoneinfo.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*.png' under directory 'docs'
warning: no files found matching '*.svg' under directory 'docs'
no previously-included directories found matching 'docs/_build'
no previously-included directories found matching 'docs/_output'
adding license file 'LICENSE'
adding license file 'licenses/LICENSE_APACHE'
writing manifest file 'src/backports.zoneinfo.egg-info/SOURCES.txt'
copying src/backports/zoneinfo/__init__.pyi -> build/lib.linux-x86_64-cpython-38/backports/zoneinfo
copying src/backports/zoneinfo/py.typed -> build/lib.linux-x86_64-cpython-38/backports/zoneinfo
warning: build_py: byte-compiling is disabled, skipping.

running build_ext
building 'backports.zoneinfo._czoneinfo' extension
creating build/temp.linux-x86_64-cpython-38
creating build/temp.linux-x86_64-cpython-38/lib
gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/local/include/python3.8 -c lib/zoneinfo_module.c -o build/temp.linux-x86_64-cpython-38/lib/zoneinfo_module.o -std=c99
error: command 'gcc' failed: No such file or directory
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for backports.zoneinfo
Failed to build backports.zoneinfo
ERROR: Could not build wheels for backports.zoneinfo, which is required to install pyproject.toml-based projects
The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 1
ERROR: Service 'web' failed to build : Build failed
Я пробовал добавил эту строку: backports.zoneinfo;python_version<"3.9" - не помогло. Как решить данную проблему? Делаю я по этой инструкции https://fixmypc.ru/post/sozdanie-i-zapusk-konteine...
  • Вопрос задан
  • 237 просмотров
Решения вопроса 1
deepblack
@deepblack
Он ругается на отсутствие gcc

Добавь его в образ python:3.8.6-alpine
RUN apk add --no-cache --virtual .build-deps gcc musl-dev \
     && pip install cython \
     && apk del .build-deps gcc musl-dev


Или используй другой образ в котором уже есть gcc.

Upd.:

Возьми нужный образ (по ссылке оттуда можно перейти в GitHub и посмотреть как устроен Dockerfile определенного образа)
отсюда (выбираешь версию и базовый образ, допустим возьмем python:3.8-alpine в нем Python 3.8.16 - посвежее будет того что ты взял изначально, Х.З. зачем тебе старая версия)
Далее создай у себя в директории Dockerfile, примерно следующего содержания:

FROM python:3.8-alpine

RUN apk add --no-cache --virtual .build-deps gcc musl-dev \
     && pip install cython \
     && apk del .build-deps gcc musl-dev
COPY requirements.txt .
RUN pip install -r requirements.txt

Билдишь образ
docker build -t appname:1.0 .

после этого у тебя будет контейнер с python 3.8.16 и gcc + должны собраться твои зависимости из requirements.txt
Останется добавить туда твое приложение и в общем готово.
Могут быть какие-то нюансы со сборкой образа,
но направление в котором двигаться я задал.

В docker-compose не забудь указать что нужно юзать твой Dockerfile или указать имя контейнера который мы выше сбилдили.

Если что-то непонятно то отдельные детали можно загуглить ))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
15 апр. 2024, в 04:12
1 руб./за проект
15 апр. 2024, в 02:38
1500 руб./за проект
15 апр. 2024, в 00:11
3000 руб./за проект