Zak*_*Zak 8 ash docker alpine-linux alpine-package-keeper
我一直在阅读 的man页面apk add,但我不完全理解如何使用该--force-broken-world标志。
我试图将 Python 2.7.6 安装到 Alpine 映像中,但出现以下错误。
$ docker run --rm -it alpine:latest apk add --no-cache python=2.7.6
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
ERROR: unsatisfiable constraints:
python2-2.7.14-r2:
breaks: world[python=2.7.6]
Run Code Online (Sandbox Code Playgroud)
但是,我可以强制安装它,但我不确定它在做什么(如果有的话)。
$ docker run --rm -it alpine:latest apk add --force-broken-world --no-cache python=2.7.6
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
OK: 4 MiB in 11 packages
Run Code Online (Sandbox Code Playgroud)
从命令行来看,一切看起来都很好。但是,当您在容器内执行此操作时,python似乎并未安装。
$ docker run --rm -it alpine:latest /bin/ash
# apk add --force-broken-world --no-cache python=2.7.6
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
OK: 4 MiB in 11 packages
# python --version
/bin/ash: python: not found
# find / -name ash
/bin/ash
# find / -name python
#
Run Code Online (Sandbox Code Playgroud)
所以问题是,这面--force-broken-world旗帜到底有什么作用,我还需要采取哪些其他步骤来修复我破碎的世界?
世界文件保存了您想要添加的所有包。因此,如果您通过添加新包,apk add它将被添加到世界文件中:
世界档案:
# cat /etc/apk/world
alpine-baselayout
alpine-keys
apk-tools
busybox
libc-utils
Run Code Online (Sandbox Code Playgroud)
现在添加一个包并查看世界文件中的差异:
/ # apk add binutils
(1/5) Installing libgcc (13.2.1_git20231014-r0)
(2/5) Installing jansson (2.14-r4)
(3/5) Installing libstdc++ (13.2.1_git20231014-r0)
(4/5) Installing zstd-libs (1.5.5-r8)
(5/5) Installing binutils (2.41-r0)
Executing busybox-1.36.1-r15.trigger
OK: 24 MiB in 20 packages
/ # cat /etc/apk/world
alpine-baselayout
alpine-keys
apk-tools
binutils
busybox
libc-utils
Run Code Online (Sandbox Code Playgroud)
如果您正在安装一个不可用的软件包,就像python在这种情况下一样,它不会被添加到世界文件中:
/ # apk add python=2.7.6
ERROR: unable to select packages:
python (no such package):
required by: world[python=2.7.6]
/ # cat /etc/apk/world
alpine-baselayout
alpine-keys
apk-tools
binutils
busybox
libc-utils
Run Code Online (Sandbox Code Playgroud)
但是,如果您force-broken-world添加它,无论它是否可用:
/ # apk add --force-broken-world python=2.7.6
OK: 24 MiB in 20 packages
/ # cat /etc/apk/world
alpine-baselayout
alpine-keys
apk-tools
binutils
busybox
libc-utils
python=2.7.6
Run Code Online (Sandbox Code Playgroud)
现在这不会改变包的可用性,这意味着你仍然不会从中获得 python,只是当你apk add下次运行时没有任何其他参数时,它会再次尝试安装它,但仍然发现它不存在:
/ # apk add
ERROR: unable to select packages:
python (no such package):
required by: world[python=2.7.6]
Run Code Online (Sandbox Code Playgroud)
有各种用例,例如,如果您构建了需要安装的软件包列表,这些软件包可能在您构建的机器上不可用,因为您无法连接到存储库,但稍后将可用。
如果你想“修复”你破碎的世界,你可以使用任何选择的文本编辑器从世界文件中删除包。
进一步阅读:https ://docs.alpinelinux.org/user-handbook/0.1a/Working/apk.html#_world
| 归档时间: |
|
| 查看次数: |
1989 次 |
| 最近记录: |