您要安装的软件包是否移动到不同的注册表?
有时正在安装的软件包是从不同的注册表分支中移动的。默认的 Docker Alpine 镜像只设置了某些注册表。添加额外的注册表会扩展您的安装选项 (YMMV);我无法谈论与不同注册表分支相关的稳定性、安全性和/或风险。这个线程帮助了我。
尝试失败和错误消息:
❯ docker run -it alpine sh
/ # apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
v3.12.0-175-g8b3334c57c [http://dl-cdn.alpinelinux.org/alpine/v3.12/main]
v3.12.0-178-gb27c83e867 [http://dl-cdn.alpinelinux.org/alpine/v3.12/community]
OK: 12749 distinct packages available
/ # apk add cowsay
ERROR: unsatisfiable constraints:
cowsay (missing):
required by: world[cowsay]
/ #
- 我们从输出中得到的第一条线索
ERROR: unsatisfiable constraints:
cowsay (missing):
required by: world[cowsay]
- 输出的第二条线索
在日志的前面
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
解决方案
- 在 DuckDuckGo 上搜索
package <package name>
我使用的是哪种类型的内存?
在包的页面上选择正确的链接。所以在我的情况下:
阅读该页面上的信息,我看到在Download the binary for this package is now part of
http://dl-cdn.alpinelinux.org/alpine/edge/testing/x86_64/cowsay-3.04-r0.apk
将此与线索 #2 进行比较,我看到 alpine 容器没有使用我要安装的二进制文件引用注册表。
成功 & TL;DR;
通过向 docker alpine 容器添加额外的注册表来将以前找不到的包添加到 alpine。
我将添加我需要查找要安装的包的注册表(步骤 #3)。在下面的代码块中,可以看到第三个注册表与第 3 部分中所做研究的 URL 的初始部分匹配。我不想替换现有的注册表(线索#2),所以我再次设置它们。我不知道这是否有必要,但我还是这样做了。
$ docker run -it alpine sh
/# apk update && apk add cowsay \
--update-cache \
--repository https://alpine.global.ssl.fastly.net/alpine/edge/community \
--repository https://alpine.global.ssl.fastly.net/alpine/edge/main \
--repository https://dl-3.alpinelinux.org/alpine/edge/testing
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
v3.12.0-175-g8b3334c57c [http://dl-cdn.alpinelinux.org/alpine/v3.12/main]
v3.12.0-178-gb27c83e867 [http://dl-cdn.alpinelinux.org/alpine/v3.12/community]
OK: 12749 distinct packages available
fetch https://dl-3.alpinelinux.org/alpine/edge/testing/x86_64/APKINDEX.tar.gz
fetch https://alpine.global.ssl.fastly.net/alpine/edge/main/x86_64/APKINDEX.tar.gz
fetch https://alpine.global.ssl.fastly.net/alpine/edge/community/x86_64/APKINDEX.tar.gz
(1/3) Installing libbz2 (1.0.8-r1)
(2/3) Installing perl (5.30.3-r2)
(3/3) Installing cowsay (3.04-r0)
Executing busybox-1.31.1-r16.trigger
OK: 43 MiB in 17 packages
/ #
Dockerfile 示例
FROM alpine
RUN apk update && apk add cowsay \
--update-cache \
--repository https://alpine.global.ssl.fastly.net/alpine/edge/community \
--repository https://alpine.global.ssl.fastly.net/alpine/edge/main \
--repository https://dl-3.alpinelinux.org/alpine/edge/testing
CMD ["cowsay", "hi stackoverflow"]
构建此文件后:
❯ docker run cowsay [13:13:45]
__________________
< hi stackoverflow >
------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||