首页 > 解决方案 > 如何解决 Docker Alpine 中缺少的依赖项

问题描述

python:3.10.0rc2-buster当我使用或python:3.10.0rc2-slim-buster没有任何问题构建我的 docker 映像时,我的 Django 应用程序工作得很好。

为了减小图像大小,我切换到python:3.10-rc-alpine,但是,我面临着数十个缺失的依赖项。

我发现这篇文章非常有帮助Docker Alpine Linux python (missing)它让我能够解决一些缺失的依赖项。

感谢您的支持,以指导我如何解决此问题?

这些是我收到的缺少的依赖项错误:

#6 9.141 ERROR: unable to select packages:
#6 9.173   libcairo2 (no such package):
#6 9.173     required by: world[libcairo2]
#6 9.173   libgdk-pixbuf2.0-0 (no such package):
#6 9.173     required by: world[libgdk-pixbuf2.0-0]
#6 9.173   libldap2-dev (no such package):
#6 9.173     required by: world[libldap2-dev]
#6 9.173   libpango-1.0-0 (no such package):
#6 9.173     required by: world[libpango-1.0-0]
#6 9.173   libpangocairo-1.0-0 (no such package):
#6 9.173     required by: world[libpangocairo-1.0-0]
#6 9.173   libsasl2-dev (no such package):
#6 9.173     required by: world[libsasl2-dev]
#6 9.173   libsnmp-dev (no such package):
#6 9.173     required by: world[libsnmp-dev]
#6 9.173   libssl-dev (no such package):
#6 9.173     required by: world[libssl-dev]
#6 9.173   pdftk (no such package):
#6 9.173     required by: world[pdftk]
#6 9.173   python-dev (no such package):
#6 9.173     required by: world[python-dev]
#6 9.173   python3-cffi (no such package):
#6 9.173     required by: world[python3-cffi]
#6 9.173   python3-setuptools (no such package):
#6 9.173     required by: world[python3-setuptools]
#6 9.173   python3-wheel (no such package):
#6 9.173     required by: world[python3-wheel]
#6 9.173   sqlite3 (no such package):
#6 9.173     required by: world[sqlite3]

这是我的 docker 文件的一部分:

FROM python:3.10-rc-alpine
RUN apk --no-cache update && \
    apk --no-cache add --update alpine-sdk && \ 
    apk --no-cache add \
    python3 \
    lsof \
    pdftk \
    unixodbc-dev \
    vim \
    git \
    python3-dev \
    python3-setuptools \
    python3-wheel \
    python3-cffi libcairo2 libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi- 
    dev shared-mime-info \
    libsasl2-dev python-dev libldap2-dev libssl-dev libsnmp-dev \
    nginx \
    supervisor \
    sqlite3 && \
    pip3 install -U pip setuptools && \

标签: pythondjangodockerdockerfilealpine

解决方案


至少有一个列出的依赖项无法使用官方包解决:

#6 9.173   pdftk (no such package):
#6 9.173     required by: world[pdftk]

The python:3.10-rc-alpine is based on Alpine 3.14.2, but the pdftk package has been deprecated since Alpine 3.9. However, you could try installing pdftk by following this answer:
https://stackoverflow.com/a/67747061/7256341
This could work, if pdftk is an application dependency and not a package dependency.

The following packages are provided by Alpine on different names:

These are the ones I was able to quickly pick up, using Alpine's package search:
https://pkgs.alpinelinux.org/packages

It's great and easy to use engine: you can search by package name using wildcards (e.g. *ldap*-dev) and using content search to locate file names in packages. With a bit of work, hopefully you should be able to find corresponding packages for the remaining dependencies. Good luck!

P.S.: Perhaps stating the obvious, but make sure to measure the size of the resulting Alpine image. The vanilla image is very compact, but once you add so many packages, the size reduction might become negligible compared to Debian slim - it might even exceed it!


推荐阅读