AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1008343
Accepted
Mark C
Mark C
Asked: 2020-03-26 06:45:41 +0800 CST2020-03-26 06:45:41 +0800 CST 2020-03-26 06:45:41 +0800 CST

在 buildah 中运行 mknod 时出错

  • 772

我正在努力将现有的 CentOS 7 Docker 映像构建过程转换为使用 Buildah,但我遇到了mknod.

目前我使用以下 Dockerfile 来构建一个新图像。所以基本上是用一个镜像来构建一个镜像,以避免对构建主机的依赖。我这样运行它:

docker build -f Dockerfile.builder -t centosbuilder:latest . && \
docker run --rm centosbuilder:latest | docker import - mycentos:latest

这是 Dockerfile:

FROM centos:7

ENV ROOTFS /image_build_root
ENV TMPDIR /tmp/image_build

WORKDIR ${TMPDIR}
RUN mkdir -p ${ROOTFS}
RUN mkdir -m 755 ${ROOTFS}/dev && \
    mknod -m 600 ${ROOTFS}/dev/console c 5 1 && \
    mknod -m 600 ${ROOTFS}/dev/initctl p && \
    mknod -m 666 ${ROOTFS}/dev/full c 1 7 && \
    mknod -m 666 ${ROOTFS}/dev/null c 1 3 && \
    mknod -m 666 ${ROOTFS}/dev/ptmx c 5 2 && \
    mknod -m 666 ${ROOTFS}/dev/random c 1 8 && \
    mknod -m 666 ${ROOTFS}/dev/tty c 5 0 && \
    mknod -m 666 ${ROOTFS}/dev/tty0 c 4 0 && \
    mknod -m 666 ${ROOTFS}/dev/urandom c 1 9 && \
    mknod -m 666 ${ROOTFS}/dev/zero c 1 5
RUN yum --installroot=${ROOTFS} --releasever=7 --setopt=tsflags=nodocs --setopt=group_package_types=mandatory -y groupinstall Core
RUN yum --installroot=${ROOTFS} -y clean all
RUN echo "NETWORKING=yes" > ${ROOTFS}/etc/sysconfig/network && \
    echo "HOSTNAME=localhost.localdomain" > ${ROOTFS}/etc/sysconfig/network
RUN rm -rf ${ROOTFS}/usr/{{lib,share}/locale,{lib,lib64}/gconv,bin/localedef,sbin/build-locale-archive} && \
    #  docs and man pages
    rm -rf ${ROOTFS}/usr/share/{man,doc,info,gnome/help} && \
    #  cracklib
    rm -rf ${ROOTFS}/usr/share/cracklib && \
    #  i18n
    rm -rf ${ROOTFS}/usr/share/i18n && \
    #  yum cache
    rm -rf ${ROOTFS}/var/cache/yum && \
    mkdir -p --mode=0755 ${ROOTFS}/var/cache/yum && \
    #  sln
    rm -rf ${ROOTFS}/sbin/sln && \
    #  ldconfig
    rm -rf ${ROOTFS}/etc/ld.so.cache ${ROOTFS}/var/cache/ldconfig && \
    mkdir -p --mode=0755 ${ROOTFS}/var/cache/ldconfig
CMD /usr/bin/tar -cf - -C ${ROOTFS} .

使用 Buildah,我在这一行遇到了我的第一个错误:

$ buildah run "${BUILDER}" mknod -m 600 "${ROOTFS}/dev/console" c 5 1
/usr/bin/mknod: '/image_build_root/dev/console': Operation not permitted
ERRO exit status 1

我尝试以 root 身份运行我的构建脚本(见下文),但无济于事。我假设可能CAP_MKNOD没有设置该功能,但即使我手动启用它,我也会收到相同的错误。

构建脚本:

#!/bin/bash -x

set -e

ROOTFS=/image_build_root
TMPDIR=/tmp/image_build

BUILDER="$(buildah from docker.io/library/centos:7)"
buildah config --workingdir "${TMPDIR}" "${BUILDER}"
buildah run "${BUILDER}" mkdir -p "${ROOTFS}"
buildah run "${BUILDER}" mkdir -m 755 "${ROOTFS}/dev"
buildah run --cap-add=CAP_MKNOD "${BUILDER}" mknod -m 600 "${ROOTFS}/dev/console" c 5 1
buildah run "${BUILDER}" mknod -m 600 "${ROOTFS}/dev/initctl" p
buildah run "${BUILDER}" mknod -m 666 "${ROOTFS}/dev/full" c 1 7
buildah run "${BUILDER}" mknod -m 666 "${ROOTFS}/dev/null" c 1 3
buildah run "${BUILDER}" mknod -m 666 "${ROOTFS}/dev/ptmx" c 5 2
buildah run "${BUILDER}" mknod -m 666 "${ROOTFS}/dev/random" c 1 8
buildah run "${BUILDER}" mknod -m 666 "${ROOTFS}/dev/tty" c 5 0
buildah run "${BUILDER}" mknod -m 666 "${ROOTFS}/dev/tty0" c 4 0
buildah run "${BUILDER}" mknod -m 666 "${ROOTFS}/dev/urandom" c 1 9
buildah run "${BUILDER}" mknod -m 666 "${ROOTFS}/dev/zero" c 1 5
buildah run "${BUILDER}" yum \
    --installroot="${ROOTFS}" \
    --releasever=7 \
    --setopt=tsflags=nodocs \
    --setopt=group_package_types=mandatory \
    -y \
    groupinstall Core
buildah run "${BUILDER}" yum --installroot="${ROOTFS}" -y clean all
buildah run "${BUILDER}" echo "NETWORKING=yes" > "${ROOTFS}/etc/sysconfig/network"
buildah run "${BUILDER}" echo "HOSTNAME=localhost.localdomain" > "${ROOTFS}/etc/sysconfig/network"
buildah run "${BUILDER}" rm -rf \
    "${ROOTFS}/usr/{{lib,share}/locale,{lib,lib64}/gconv,bin/localedef,sbin/build-locale-archive}" \
    "${ROOTFS}/usr/share/{man,doc,info,gnome/help}" \
    "${ROOTFS}/usr/share/cracklib" \
    "${ROOTFS}/usr/share/i18n" \
    "${ROOTFS}/var/cache/yum" \
    "${ROOTFS}/sbin/sln" \
    "${ROOTFS}/etc/ld.so.cache" \
    "${ROOTFS}/var/cache/ldconfig"
buildah run "${BUILDER}" mkdir -p --mode=0755 "${ROOTFS}/var/cache/yum"
buildah run "${BUILDER}" mkdir -p --mode=0755 "${ROOTFS}/var/cache/ldconfig"
buildah config --cmd /usr/bin/tar -cf - -C "${ROOTFS}" . "${BUILDER}"
buildah commit "${BUILDER}" centos7builder
linux podman
  • 1 1 个回答
  • 265 Views

1 个回答

  • Voted
  1. Best Answer
    puchu
    2021-05-15T15:05:39+08:002021-05-15T15:05:39+08:00

    非特权用户(无根用户)没有足够的特权来使用 mknod,内核会阻止它。用户命名空间中剩下多少功能并不重要,它仍然无法使用它。

    请参考以下问题。

    不能使用mknod和buildah bud/run --isolation="rootless"。您需要忽略mknod或使用另一个isolation. 不能混合它们。这太可怕了,什么也做不了。

    • 1

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve