如何解决 Docker Alpine 中缺少的依赖项
How to resolve missing dependencies in Docker Alpine
我有 Django 应用程序,当我使用 python:3.10.0rc2-buster
或 python:3.10.0rc2-slim-buster
构建我的 docker 图像时,它工作正常。
为了减小图像大小,我切换到 python:3.10-rc-alpine
,但是,我面临着数十个缺少的依赖项。
我发现这个 post 非常有用 它让我解决了一些缺失的依赖项。
感谢您的支持,指导我如何解决此问题?
这些是我收到的缺少依赖项错误:
#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 && \
至少有一个列出的依赖项无法使用官方包解决:
#6 9.173 pdftk (no such package):
#6 9.173 required by: world[pdftk]
python:3.10-rc-alpine 基于 Alpine 3.14.2,但 pdftk
包自 Alpine 3.9 以来一直是 deprecated。但是,您可以按照以下答案尝试安装 pdftk
:
如果 pdftk
是应用程序依赖项而不是程序包依赖项,这可能会起作用。
Alpine 以不同的名称提供了以下软件包:
python-dev
-> python3-dev
libldap2-dev
-> openldap-dev
libssl-dev
-> openssl-dev
libsnmp-dev
-> net-snmp-dev
python3-setuptools
-> py3-setuptools
python3-wheel
-> py3-wheel
sqlite3
-> sqlite
这些是我能够使用 Alpine 的包搜索快速找到的:
https://pkgs.alpinelinux.org/packages
这是一个很棒且易于使用的引擎:您可以使用通配符(例如 *ldap*-dev
)按包名称进行搜索,并使用内容搜索来定位包中的文件名。通过一些工作,希望您应该能够为剩余的依赖项找到相应的包。祝你好运!
P.S.: 也许说的很明显,但一定要测量生成的 Alpine 图像的大小。 vanilla 镜像非常紧凑,但是一旦添加了如此多的软件包,与 Debian slim 相比,大小的减少可能会变得微不足道 - 甚至可能超过它!
我有 Django 应用程序,当我使用 python:3.10.0rc2-buster
或 python:3.10.0rc2-slim-buster
构建我的 docker 图像时,它工作正常。
为了减小图像大小,我切换到 python:3.10-rc-alpine
,但是,我面临着数十个缺少的依赖项。
我发现这个 post 非常有用
感谢您的支持,指导我如何解决此问题?
这些是我收到的缺少依赖项错误:
#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 && \
至少有一个列出的依赖项无法使用官方包解决:
#6 9.173 pdftk (no such package):
#6 9.173 required by: world[pdftk]
python:3.10-rc-alpine 基于 Alpine 3.14.2,但 pdftk
包自 Alpine 3.9 以来一直是 deprecated。但是,您可以按照以下答案尝试安装 pdftk
:
如果 pdftk
是应用程序依赖项而不是程序包依赖项,这可能会起作用。
Alpine 以不同的名称提供了以下软件包:
python-dev
->python3-dev
libldap2-dev
->openldap-dev
libssl-dev
->openssl-dev
libsnmp-dev
->net-snmp-dev
python3-setuptools
->py3-setuptools
python3-wheel
->py3-wheel
sqlite3
->sqlite
这些是我能够使用 Alpine 的包搜索快速找到的:
https://pkgs.alpinelinux.org/packages
这是一个很棒且易于使用的引擎:您可以使用通配符(例如 *ldap*-dev
)按包名称进行搜索,并使用内容搜索来定位包中的文件名。通过一些工作,希望您应该能够为剩余的依赖项找到相应的包。祝你好运!
P.S.: 也许说的很明显,但一定要测量生成的 Alpine 图像的大小。 vanilla 镜像非常紧凑,但是一旦添加了如此多的软件包,与 Debian slim 相比,大小的减少可能会变得微不足道 - 甚至可能超过它!