Je veux déployer mon projet python dans docker, j'ai écrit lxml>=3.5.0
dans le requirements.txt car le projet a besoin de lxml. Voici mon dockfile:
FROM gliderlabs/Alpine:3.3
RUN set -x \
&& buildDeps='\
python-dev \
py-pip \
build-base \
' \
&& apk --update add python py-lxml $buildDeps \
&& rm -rf /var/cache/apk/* \
&& mkdir -p /app
ENV INSTALL_PATH /app
WORKDIR $INSTALL_PATH
COPY requirements-docker.txt ./
RUN pip install -r requirements.txt
COPY . .
RUN apk del --purge $buildDeps
ENTRYPOINT ["celery", "-A", "tasks", "worker", "-l", "info", "-B"]
Je l'ai obtenu lorsque je l'ai déployé sur Docker:
*********************************************************************************
Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?
*********************************************************************************
error: command 'gcc' failed with exit status 1
----------------------------------------
Rolling back uninstall of lxml
Je pensais que c'était parce que 'python-dev' et 'python-lxml', alors j'ai édité le dockfile comme ceci:
WORKDIR $INSTALL_PATH
COPY requirements-docker.txt ./
RUN apt-get build-dev python-lxml
RUN pip install -r requirements.txt
Cela n'a pas fonctionné et j'ai eu une autre erreur:
---> Running in 73201a0dcd59
/bin/sh: apt-get: not found
Comment installer correctement lxml dans docker?
J'ai ajouté RUN apk add --update --no-cache g++ gcc libxslt-dev
avant RUN pip install -r requirements.txt
et cela a fonctionné.
La réponse acceptée n'est pas nette et installe des packages redondants. Une meilleure solution pour réduire la taille de l'image sera:
RUN apk add --no-cache --virtual .build-deps gcc libc-dev libxslt-dev && \
apk add --no-cache libxslt && \
pip install --no-cache-dir lxml>=3.5.0 && \
apk del .build-deps
La taille de l'image résultante sera <163 Mo