You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在python:3.9-alpine3.13镜像中添加缺失的libpcre3及libpcre3-dev

问题描述

我需要为uWSGI提供PCRE支持,因此计划在基于python:3.9-alpine3.13的Docker镜像中安装libpcre3和libpcre3-dev。以下是我的Dockerfile配置:

FROM python:3.9-alpine3.13

ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt /tmp/requirements.txt
COPY ./requirements.dev.txt /tmp/requirements.dev.txt
COPY ./scripts /scripts
COPY ./app /app
WORKDIR /app
EXPOSE 8000

ARG DEV=false
RUN python -m venv /py && \
    /py/bin/pip install --upgrade pip && \
    apk add --update --no-cache postgresql-client jpeg-dev libpcre3-dev libpcre3 && \
    apk add --update --no-cache --virtual .tmp-build-deps \
        build-base postgresql-dev musl-dev zlib zlib-dev linux-headers && \
    /py/bin/pip install -r /tmp/requirements.txt && \
    if [ $DEV = "true" ]; then /py/bin/pip install -r /tmp/requirements.dev.txt ; \
    fi && \
    rm -rf /tmp && \
    apk del .tmp-build-deps && \
    adduser \
        --disabled-password \
        --no-create-home \
        django-user && \
    mkdir -p /vol/web/media && \
    mkdir -p /vol/web/static && \
    chown -R django-user:django-user /vol && \
    chmod -R 755 /vol && \
    chmod -R +x /scripts

ENV PATH="/scripts:/py/bin:$PATH"

执行时出现如下错误:

> [recipe-app-api-app 7/7] RUN python -m venv /py &&     /py/bin/pip install --upgrade pip &&     apk add --update --no-cache postgresql-client jpeg-dev libpcre3-dev libpcre3 &&     apk add --update --no-cache --virtual .tmp-build-deps         build-base postgresql-dev musl-dev zlib zlib-dev linux-headers &&     /py/bin/pip install -r /tmp/requirements.txt &&     if [ false = "true" ]; then /py/bin/pip install -r /tmp/requirements.dev.txt ;     fi &&     rm -rf /tmp &&     apk del .tmp-build-deps &&     adduser         --disabled-password         --no-create-home         django-user &&     mkdir -p /vol/web/media &&     mkdir -p /vol/web/static &&     chown -R django-user:django-user /vol &&     chmod -R 755 /vol &&     chmod -R +x /scripts:
#0 4.542 Requirement already satisfied: pip in /py/lib/python3.9/site-packages (21.2.4)
#0 4.820 Collecting pip
#0 4.970   Downloading pip-22.3.1-py3-none-any.whl (2.1 MB)
#0 5.584 Installing collected packages: pip
#0 5.584   Attempting uninstall: pip
#0 5.584     Found existing installation: pip 21.2.4
#0 5.680     Uninstalling pip-21.2.4:
#0 5.688       Successfully uninstalled pip-21.2.4
#0 7.017 Successfully installed pip-22.3.1
#0 7.268 fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
#0 7.753 fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
#0 8.331 ERROR: unable to select packages:
#0 8.356   libpcre3 (no such package):
#0 8.356     required by: world[libpcre3]
#0 8.356   libpcre3-dev (no such package):
#0 8.356     required by: world[libpcre3-dev]
------
failed to solve: executor failed running [/bin/sh -c python -m venv /py &&     /py/bin/pip install --upgrade pip &&     apk add --update --no-cache postgresql-client jpeg-dev libpcre3-dev libpcre3 &&     apk add --update --no-cache --virtual .tmp-build-deps         build-base postgresql-dev musl-dev zlib zlib-dev linux-headers &&     /py/bin/pip install -r /tmp/requirements.txt &&     if [ $DEV = "true" ]; then /py/bin/pip install -r /tmp/requirements.dev.txt ;     fi &&     rm -rf /tmp &&     apk del .tmp-build-deps &&     adduser         --disabled-password         --no-create-home         django-user &&     mkdir -p /vol/web/media &&     mkdir -p /vol/web/static &&     chown -R django-user:django-user /vol &&     chmod -R 755 /vol &&     chmod -R +x /scripts]: exit code: 2

尝试更换包名并搜索资料后仍无法解决,请问有什么办法可以添加这两个包?

解决方案

Alpine Linux的包命名规则和Debian/Ubuntu不同,你要找的PCRE相关包在Alpine仓库里叫pcre(对应Debian系的libpcre3)和pcre-dev(对应Debian系的libpcre3-dev)。

1. 替换包名修改Dockerfile

把Dockerfile中apk add命令里的libpcre3-dev libpcre3替换为pcre pcre-dev即可:

apk add --update --no-cache postgresql-client jpeg-dev pcre pcre-dev && \

2. 优化镜像体积(可选)

pcre-dev是构建依赖,安装完成后可以移除以减少镜像体积。建议将其放到.tmp-build-deps虚拟包组中,调整后的RUN命令如下:

RUN python -m venv /py && \
    /py/bin/pip install --upgrade pip && \
    apk add --update --no-cache postgresql-client jpeg-dev pcre && \
    apk add --update --no-cache --virtual .tmp-build-deps \
        build-base postgresql-dev musl-dev zlib zlib-dev linux-headers pcre-dev && \
    /py/bin/pip install -r /tmp/requirements.txt && \
    if [ $DEV = "true" ]; then /py/bin/pip install -r /tmp/requirements.dev.txt ; \
    fi && \
    rm -rf /tmp && \
    apk del .tmp-build-deps && \
    adduser \
        --disabled-password \
        --no-create-home \
        django-user && \
    mkdir -p /vol/web/media && \
    mkdir -p /vol/web/static && \
    chown -R django-user:django-user /vol && \
    chmod -R 755 /vol && \
    chmod -R +x /scripts

这样执行apk del .tmp-build-deps时会自动移除pcre-dev,只保留uWSGI运行时需要的pcre包。

内容的提问来源于stack exchange,提问作者Nuzulul Aulia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:10:27