使用lxml的多阶段Docker构建

时间:2020-07-04 17:58:53

标签: python docker dockerfile lxml

我正在尝试为依赖于lxml的{​​{1}}软件包的应用构建较小的图像(我的bs4仅具有这两个软件包)。

这就是我所拥有的:

Pipfile

该构建工作正常,但是当我尝试在第二阶段图像中运行我的应用程序时,我得到了:

FROM python:3.8-alpine as build

COPY src/ /app/src/
COPY Pipfile Pipfile.lock /app/

# for python lxml
RUN apk add --update --no-cache --virtual .build-deps \
    g++ \
    python3-dev \
    libxml2 \
    libxml2-dev && \
    apk add libxslt-dev && \
    apk del .build-deps

RUN pip install pipenv==2020.6.2

WORKDIR /app

ENV PIPENV_VENV_IN_PROJECT 1
RUN pipenv install --deploy


FROM python:3.8-alpine as run
COPY --from=build /app /app/
WORKDIR /app
RUN addgroup -S app && adduser -S -G app app 
USER app
CMD .venv/bin/python src/main.py

如果我将其构建为一个阶段,并在第一阶段运行该应用程序,则一切正常,这意味着bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library? 软件包在第一阶段已正确构建和安装,但未复制到第二阶段。

如何将我的lxml包移到第二阶段?

1 个答案:

答案 0 :(得分:0)

您可能需要在应用程序的python文件中进行一些更改,而不是libxml2试试lxml。官方文档:Installing a parser。Beautiful Soup也支持它。