python - 如何解决 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 && \
解决方案
至少有一个列出的依赖项无法使用官方包解决:
#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:
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
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!
推荐阅读
- c# - 在修改控件之前,WPF 双向绑定不起作用
- c# - AutoMapper:映射 ImmutableHashSet 的问题
- arduino - 如何获取连接到本地网络的 esp32 ip 地址
- python - 将 tensorflow 模型转换为 tflite 时遇到问题
- typescript - 如何在打字稿中将类型对象键转换为字符串类型的数组
- spring - 在 Spring Boot 应用程序中访问 Amazon QLDB
- c# - 获取 C# 项目的所有引用
- java - 用 C# 签名的数据,在 C# 中验证,但在 Java 中不验证
- javascript - 如何在 VueJS 中传递道具?
- python - 尝试为测试组织点击 Salesforce API 时出现身份验证错误