Ответ 1
Я добавил RUN apk add --update --no-cache g++ gcc libxslt-dev
до RUN pip install -r requirements.txt
, и это сработало.
Я хочу развернуть свой проект на Python в Docker, я написал lxml>=3.5.0
в Requirments.txt, так как для проекта требуется lxml. Вот мой док файл:
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"]
Я получил это, когда развернул в докере:
*********************************************************************************
Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?
*********************************************************************************
error: command 'gcc' failed with exit status 1
----------------------------------------
Rolling back uninstall of lxml
Я подумал, что это из-за 'python-dev' и 'python-lxml', затем я отредактировал док файл так:
WORKDIR $INSTALL_PATH
COPY requirements-docker.txt ./
RUN apt-get build-dev python-lxml
RUN pip install -r requirements.txt
Это не сработало, и я получил еще одну ошибку:
---> Running in 73201a0dcd59
/bin/sh: apt-get: not found
Как правильно установить lxml в докере?
Я добавил RUN apk add --update --no-cache g++ gcc libxslt-dev
до RUN pip install -r requirements.txt
, и это сработало.
Принятый ответ не является аккуратным и устанавливает избыточные пакеты. Лучшим решением для уменьшения размера изображения будет:
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
Размер полученного изображения будет & lt; 163MB
Сделайте как в
https://hub.docker.com/r/ryanfox1985/docker-couchpotato/builds/boinrrs9dbhnutwjxjw2l8m/
Загрузите apk и установите его
RUN wget http://nl.alpinelinux.org/alpine/edge/main/x86_64/py-lxml-3.4.0-r0.apk -O /var/cache/apk/py-lxml.apk
RUN apk add --allow-untrusted /var/cache/apk/py-lxml.apk
На самом деле, это просто
RUN apt-get install -y libxslt1-dev