我需要运行一个 Arch Linux 容器,但无法在其上安装任何东西:
当我尝试奔跑pacman -Syyu --noconfirm
error: failed to initialize alpm library
(could not find or read directory: /var/lib/pacman/)
下列的那条线
我跑了
pacman-db-upgrade
但这也失败了:
==> ERROR: You must have correct permissions to upgrade the database.
此容器是archlinux:latest
基于香草的容器,随docker run -it archlinux
答案1
EDIT3:现在已修复此问题,并glibc
已将其添加/etc/pacman.conf
为HoldPkg
防止官方图像将来出现故障。
pacman
EDIT2:在Dockerfile 内部的任何位置运行之前和之后添加此内容。
# TEMP-FIX for pacman issue
RUN patched_glibc=glibc-linux4-2.33-4-x86_64.pkg.tar.zst \
&& curl -LO "https://raw.githubusercontent.com/sickcodes/Docker-OSX/master/${patched_glibc}" \
&& bsdtar -C / -xvf "${patched_glibc}" || echo "Everything is fine."
# TEMP-FIX for pacman issue
我在 Dockerfile 中添加了它四次:https://github.com/sickcodes/Docker-OSX/pull/159
编辑:有一个非官方补丁可用,我们从中复制了它:https://github.com/qutebrowser/qutebrowser/commit/478e4de7bd1f26bebdcdc166d5369b2b5142c3e2
# WORKAROUND for glibc 2.33 and old Docker
# See https://github.com/actions/virtual-environments/issues/2658
# Thanks to https://github.com/lxqt/lxqt-panel/pull/1562
RUN patched_glibc=glibc-linux4-2.33-4-x86_64.pkg.tar.zst && \
curl -LO "https://repo.archlinuxcn.org/x86_64/$patched_glibc" && \
bsdtar -C / -xvf "$patched_glibc"
原文:这是一个实时错误,应该在本周修复(据称)。
https://bugs.archlinux.org/index.php?do=details&task_id=69563
该错误是由于 glibc 2.33 的向后兼容性造成的,但几乎所有其他发行版都不会在 Docker 内部构建 glibc 2.33。
如果您在 Arch 主机上构建它,它就会构建。
它与 runc 有关,实际上它已经被修补,但我们正在等待以下两种结果之一:
- 所有其他发行版和构建服务都在迎头赶上(不要屏住呼吸)
- 或者为了实现这个 util-linux 修复:https://bugs.archlinux.org/index.php?do=details&task_id=69613
我们这里有完全相同的问题,阻止所有 hub.docker.com 构建:
答案2
只要我明白这是因为特权使用 Docker 配置并运行容器。当我们登录操作系统时,看起来我们确实可以登录,root
但实际上我们没有正确的root
权限。下面是一个简单的尝试:
root[0]docker:~# docker run -it archlinux:latest bash
[root@c565c90fdb7f /]# pacman
error: failed to initialize alpm library
(could not find or read directory: /var/lib/pacman/)
[root@c565c90fdb7f /]# exit
exit
但如果我们给出正确的root权限当我们登录到容器时就没问题了。
root[0]docker:~# docker run -it --privileged=true archlinux:latest bash
[root@0d95575abec6 /]# dir
bin boot dev etc home lib lib64 mnt opt proc root run sbin srv sys tmp usr var
[root@0d95575abec6 /]# pacman
warning: database file for 'core' does not exist (use '-Sy' to download)
warning: database file for 'extra' does not exist (use '-Sy' to download)
warning: database file for 'community' does not exist (use '-Sy' to download)
error: no operation specified (use -h for help)
[root@0d95575abec6 /]# pacman -Sy
:: Synchronizing package databases...
core 131.2 KiB 10.7 MiB/s 00:00 [####################################################################################] 100%
extra 1654.4 KiB 101 MiB/s 00:00 [####################################################################################] 100%
community 5.4 MiB 270 MiB/s 00:00 [####################################################################################] 100%
[root@0d95575abec6 /]# exit
exit
因此,对于登录,应该使用Arch Linux
此选项,而对于,,似乎我们不需要它。--privileged=true
Debian
Alpine
Ubunut
已测试:
cat /etc/os-release
NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://www.archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://bugs.archlinux.org/"
LOGO=archlinux
和
pacman -V
.--. Pacman v5.2.2 - libalpm v12.0.2
/ _.-' .-. .-. .-. Copyright (C) 2006-2020 Pacman Development Team
\ '-. '-' '-' '-' Copyright (C) 2002-2006 Judd Vinet
'--'
This program may be freely redistributed under
the terms of the GNU General Public License.
和 Docker
docker -v
Docker version 19.03.6, build 369ce74a3c
答案3
无论是使用修补的 glibc 还是选项,事情都无法正常工作--privileged=true
。如果 archlinux 不是 docker 的选项,那将是一个很大的问题。
示例:使用 dotnet 构建只会输出大量内容:
realpath(): Operation not permitted
答案4
为我的工作添加网络
docker run --net=host -it archlinux:latest /bin/bash