【发布时间】:2021-07-06 20:49:55
【问题描述】:
所以,我正在尝试在 Alpine Linux Docker 容器中构建 musl-libc。 configure脚本成功了,但是make因为不能运行mkdir而立即停止:
mkdir -p lib
make: mkdir: Operation not permitted
make: *** [Makefile:96: lib] Error 127
使用 strace,我可以看到它在检查各种 mkdir 符号链接的访问权限时获得了 EPERM,因此它从未实际运行命令本身:
faccessat2(AT_FDCWD, "/usr/local/sbin/mkdir", X_OK, AT_EACCESS) = -1 EPERM (Operation not permitted)
faccessat2(AT_FDCWD, "/usr/local/bin/mkdir", X_OK, AT_EACCESS) = -1 EPERM (Operation not permitted)
faccessat2(AT_FDCWD, "/usr/sbin/mkdir", X_OK, AT_EACCESS) = -1 EPERM (Operation not permitted)
faccessat2(AT_FDCWD, "/usr/bin/mkdir", X_OK, AT_EACCESS) = -1 EPERM (Operation not permitted)
faccessat2(AT_FDCWD, "/sbin/mkdir", X_OK, AT_EACCESS) = -1 EPERM (Operation not permitted)
faccessat2(AT_FDCWD, "/bin/mkdir", X_OK, AT_EACCESS) = -1 EPERM (Operation not permitted)
我不知道这是为什么。我以 root 身份运行 make,/bin/busybox 无论如何都为所有用户设置了可执行位。我可以从命令行很好地创建目录。这是怎么回事,我该如何解决?
编辑: 根据要求,这是我正在使用的 Dockerfile:
FROM alpine
ENV UTILS='vim tmux gdb strace git mandoc'
ENV DEPS='gcc make'
RUN apk update && apk add $DEPS $UTILS
ADD musl-src /musl-libc
ENV NPROC=6
RUN cd musl-libc && ./configure --prefix=/usr --enable-debug && \
make -j$NPROC
RUN cd musl-libc && make install
需要./musl-src中的musl源代码。
【问题讨论】:
-
顺便说一句,不仅仅是
mkdir。编辑musl-src/Makefile以调用任何其他命令(ls、cat等),它会以同样的方式失败。 -
嘿,我想我找到了。查看github.com/moby/moby/blob/19.03/profiles/seccomp/default.json --
faccessat在允许的系统调用列表中,但不在faccessat2中。 -
不错!更新到 Docker 19.06+(Ubuntu 上的最新/beta 频道)为我修复了它。如果您将此作为答案,我会接受。
-
我记得以前看过很像这个问题的东西,看了看,之前的例子是stackoverflow.com/questions/48995826/…。我认为这比回答更好地关闭为重复;没有理由拥有多个实例。
标签: docker makefile alpine musl