Harbar 安装出错
本文最后更新于 2025年3月20日 下午
Harbar 安装出错
harboar启动失败,安装Harbor version:v2.9.0
1 |
|
问题原因是docker版本过低,解决办法是升级docker版本大于20.10.10后即可解决。
问题原因
最新的 glibc (2.33.9000,在 Fedora 35 rawhide 中)现在默认尝试使用 ‘clone3’。
为了实现向后兼容性,如果它看到 ENOSYS errno 将自动回退 “clone”。
任何其他 errno 都被视为致命的错误。
docker 安装的默认 seccomp 过滤器会导致 EPERM,因此这会中断 glibc 回退。因此程序无法生成线程和fork子进程。
根本原因
带有 libseccomp 的 Docker packages/libs 中使用的较新的 syscall 被阻止。
Secommp
Secommp (SECure COMPuting) 是 Linux 内核 2.6.12 版本引入的安全模块,主要是用来限制某一进程可用的系统调用 (system call)。
它最初被用于 cpushare 这个项目,让人们可以出租自己空闲的 cpu cycle 来执行 untrusted code。
这个 feature 本身并不是一个沙盒 (sandbox),它只是一种减少 Linux 内核暴露的机制,是构建一个安全的沙盒的重要组成部分。
Docker Secommp
libseccomp 允许您为进程配置允许的系统调用。
Docker 为所有容器设置默认的 seccomp 配置文件,以便仅允许某些 syscall,而阻止其他所有内容(因此,libseccomp 或 docker 尚不知道的较新 syscall 将被阻止3)
docker每个容器默认都设置了一个seccomp profile,屏蔽掉了其中的44个系统调用。
docker会将seccomp传递给runc中的sepc.linux.seccomp。
可以通过—security-opt seccomp=xxx来设置docker的seccomp策略,xxx为json格式的文件,其中定义了seccomp规则。
也可以通过–security-opt seccomp=unconfined来关闭docker引入默认的seccomp规则的限制。
Secommp 等导致的 operation not permitted 处理办法
- –security-opt seccomp=unconfined来关闭docker引入默认的seccomp规则的限制
- 切换到较旧的映像, 如果 16 在移动到 Debian Bookworm 时开始失败,那么 16-bullseye 是一个有效的解决方法,直到主机可以更新为止。
- 更新主机docker版本
参考
[1] DB init error: popen failure: Cannot allocate memory
[2] Docker image fails during initdb
[3] seccomp: add support for “clone3” syscall in default policy
[4] seccomp filter breaks latest glibc (in fedora rawhide) by blocking clone3 with EPERM
[5] Seccomp security profiles for Docker
[6] operation not permitted, a libseccomp story
[7] runtime/cgo: pthread_create failed: Operation not permitted