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图像,但我遇到了同样的问题。所以你有两个选择:
mysqlclient到以前的版本,例如:mysqlclient==2.1.1。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
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)
我已经成功解决了这个问题,以下是我的做法:这是新的 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)
我希望这会对将来访问这篇文章的人有所帮助。