Ошибка gcc при создании образа Docker для Django в Windows - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь создать образ докера, используя код Visual Studio, следуя этому руководству "https://code.visualstudio.com/docs/python/tutorial-deploy-containers".

Я создал приложение django с подключением к серверу MSSQL на Azure с пакетом pyodbc.

Во время сборки образа Docker я получаю следующие сообщения об ошибках:

unable to execute 'gcc': No such file or directory   
error: command 'gcc' failed with exit status 1

----------------------------------------   
 Failed building wheel for pyodbc

и

  unable to execute 'gcc': No such file or directory
  error: command 'gcc' failed with exit status 1

  ----------------------------------------
  Failed building wheel for typed-ast

Я читаю решения для систем Linux, где нужно установить python-dev, но так как я работаю на машине с Windows, это не решение.

Затем я прочитал, что на окнах все необходимые файлы находятся в каталоге 'include' установки python. Но в установке venv этопапка пуста ... поэтому я создал соединение каталогов с исходным 'include'. Ошибка все еще существует.

Мой файл Docker включен ниже.

# Python support can be specified down to the minor or micro version
# (e.g. 3.6 or 3.6.3).
# OS Support also exists for jessie & stretch (slim and full).
# See https://hub.docker.com/r/library/python/ for all supported Python
# tags from Docker Hub.
FROM tiangolo/uwsgi-nginx:python3.6-alpine3.7

# Indicate where uwsgi.ini lives
ENV UWSGI_INI uwsgi.ini

# Tell nginx where static files live (as typically collected using Django's
# collectstatic command.
ENV STATIC_URL /app/static_collected

# Copy the app files to a folder and run it from there
WORKDIR /app
ADD . /app

# Make app folder writable for the sake of db.sqlite3, and make that file also writable.
# RUN chmod g+w /app
# RUN chmod g+w /app/db.sqlite3

# If you prefer miniconda:
#FROM continuumio/miniconda3

LABEL Name=hello_django Version=0.0.1
EXPOSE 8000

# Using pip:
RUN python3 -m pip install -r requirements.txt
CMD ["python3", "-m", "hello_django"]

# Using pipenv:
#RUN python3 -m pip install pipenv
#RUN pipenv install --ignore-pipfile
#CMD ["pipenv", "run", "python3", "-m", "hello_django"]

# Using miniconda (make sure to replace 'myenv' w/ your environment name):
#RUN conda env create -f environment.yml
#CMD /bin/bash -c "source activate myenv && python3 -m hello_django"

Я мог бы использовать некоторыепомощь в построении изображения без ошибок.


На основе ответа 2ps я добавил эти строки почти в верхней части файла Docker

FROM tiangolo/uwsgi-nginx:python3.6-alpine3.7

RUN apk update \
  && apk add apk add gcc libc-dev g++ \
  && apk add libffi-dev libxml2 libffi-dev \
  && apk add unixodbc-dev mariadb-dev python3-dev

и получилIved новая ошибка ...

fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
v3.7.1-98-g2f2e944c59 [http://dl-cdn.alpinelinux.org/alpine/v3.7/main]
v3.7.1-105-g7db92f4321 [http://dl-cdn.alpinelinux.org/alpine/v3.7/community]
OK: 9053 distinct packages available
ERROR: unsatisfiable constraints:
  add (missing):
    required by: world[add]
  apk (missing):
    required by: world[apk]
The command '/bin/sh -c apk update   && apk add apk add gcc libc-dev g++   && apk add libffi-dev libxml2 libffi-dev   && apk add unixodbc-dev mariadb-dev python3-dev' returned a non-zero code: 2

Обнаружил, что добавление

RUN echo "ipv6" >> /etc/modules

помогло с ошибками выше.Взято из: https://github.com/gliderlabs/docker-alpine/issues/55


Приложение теперь работает, за исключением того, что предполагаемое соединение с базой данных MsSQL все еще не работает.

Error at /

('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 13 for SQL Server' : file not found (0) (SQLDriverConnect)")

Думаю, мне стоит запачкать руки на документации докера.

1 Ответ

0 голосов
/ 01 февраля 2019

Вам нужно будет использовать apk для установки gcc и других собственных зависимостей, необходимых для построения ваших pip зависимостей.Для тех, что вы перечислили (typedast и pyodbc), я думаю, что они будут:

RUN apk update \
  && apk add apk add gcc libc-dev g++ \
  && apk add libffi-dev libxml2 libffi-dev \
  && apk add unixodbc-dev mariadb-dev python3-dev
...