Docker Alpine 构建在 mysqlclient 安装上失败,并出现错误:异常:找不到有效的 pkg-config 名称

Ida*_*anB 22 python docker mysql-connector-python alpine-linux

我在使用基于 Python 的 Dockerfile 构建 Docker 映像时遇到问题。我正在尝试使用 mysqlclient 库(版本 2.2.0)和 Django(版本 4.2.2)。这是我的 Dockerfile:

FROM python:3.11-alpine
WORKDIR /usr/src/app
COPY requirements.txt .
RUN apk add --no-cache gcc musl-dev mariadb-connector-c-dev && \
    pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Run Code Online (Sandbox Code Playgroud)

当 Docker 构建过程到达安装 mysqlclient 包时就会出现问题。我收到以下错误:异常:找不到有效的 pkg-config 名称 为了解决此问题,我尝试将 pkgconfig 添加到 apk add 命令,不幸的是,这没有帮助,并且仍然存在相同的错误。

如果您能提供有关如何解决此问题的指导,我将不胜感激。

先感谢您。

Ari*_*lho 27

我正在使用python:3.11.3-slim-bullseye而不是python:3.11-alpine图像,但我遇到了同样的问题。所以你有两个选择:

  1. 降级mysqlclient到以前的版本,例如:mysqlclient==2.1.1
  2. 现在,因为pkg-config需要mysqlclient==2.2.0不断。将 pkg-config 添加到容器中。会是这样的...
FROM python:3.11.3-slim-bullseye

RUN apt-get update \
    && apt-get upgrade -y \
    && apt-get install -y gcc default-libmysqlclient-dev pkg-config \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /usr/src/app
COPY . .

RUN pip install --upgrade pip \
    && pip install mysqlclient \
    && pip install -r requirements.txt

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Run Code Online (Sandbox Code Playgroud)

提示:也许您缺少在容器中安装default-libmysqlclient-dev或。libmysqlclient

希望能帮助到你。:D


Dav*_*ith 8

mysqlclient 2.2.0 添加了对 pkg-config 的依赖,该依赖在 alpine 上可能不存在(更新:现在看来是这样)。请参阅https://github.com/PyMySQL/mysqlclient/issues/620

您可能会幸运地固定到以前版本的 mysqlclient


小智 7

我在一个 slim Docker 镜像 (python3.10-slim) 中遇到了这个问题。

sudo apt update && sudo apt install pkg-config
Run Code Online (Sandbox Code Playgroud)

这对我来说很有效。


小智 5

安装构建依赖项(特别是 - pkg-config )

sudo apt-get install python3-dev default-libmysqlclient-dev build-essential pkg-config
Run Code Online (Sandbox Code Playgroud)


Ida*_*anB 1

我已经成功解决了这个问题,以下是我的做法:这是新的 Dockerfile:

FROM python:3.11-alpine
WORKDIR /usr/src/app
COPY requirements.txt .
RUN apk add --no-cache --virtual build-deps gcc musl-dev libffi-dev2 pkgconf mariadb-dev && \
    apk add --no-cache mariadb-connector-c-dev && \
    pip install --no-cache-dir -r requirements.txt && \
    apk del build-deps
COPY . .
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Run Code Online (Sandbox Code Playgroud)

requirements.txt

mysqlclient==2.2.0
Django~=4.2.0
Run Code Online (Sandbox Code Playgroud)

我希望这会对将来访问这篇文章的人有所帮助。