Centos 7 docker yum 安装卡住

Jer*_*emy 3 centos yum docker centos7 dockerfile

当我尝试构建 Dockerfile 时,docker build -t agent .我的构建过程陷入了 yum 安装过程,并且在我的 Linux 和 Windows 上都没有进一步发展:

+ yum -q install -y bash bzip2-devel ca-certificates curl epel-release gcc gcc-c++ git gnutls gnutls-devel libffi-devel make ncurses-devel openssh-clients openssh-server openssl openssl-devel rsync readline-devel tar unzip wget zip zlib-devel temurin-11-jdk
Package bash-4.2.46-35.el7_9.x86_64 already installed and latest version
Package ca-certificates-2022.2.54-74.el7_9.noarch already installed and latest version
Package curl-7.29.0-59.el7_9.1.x86_64 already installed and latest version
Package 2:tar-1.26-35.el7.x86_64 already installed and latest version

Run Code Online (Sandbox Code Playgroud)

Dockerfile代码

FROM centos:7

RUN set -ex &&  echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' > /etc/nsswitch.conf

RUN set -ex && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
RUN set -ex && yum -q install -y docker-ce docker-ce-cli containerd.io

# -- Install OS packages:
RUN set -ex && yum -q update -y && yum -q install -y \
    bash \
    bzip2-devel \
    ca-certificates \
    curl \
    epel-release \
    gcc \
    gcc-c++ \
    git \
    gnutls \
    gnutls-devel \
    libffi-devel \
    make \
    ncurses-devel \
    openssh-clients \
    openssh-server \
    openssl \
    openssl-devel \
    rsync \
    readline-devel \
    tar \
    unzip \
    wget \
    zip \
    zlib-devel \
    temurin-11-jdk
Run Code Online (Sandbox Code Playgroud)

我尝试构建其他 centos 映像,它构建得很好,甚至尝试了 Ubuntu 和其他随机映像。这个问题仅在这个 Dockerfile 中特定

lar*_*sks 16

您遇到了这个错误(另请参阅此拉取请求及其修复)。旧版本rpm(例如 CentOS 7)包含尝试CLOEXEC在所有文件描述符上设置标志的代码。由于 Docker 对文件数量设置了很高的限制(1073741816),因此这个过程需要非常长的时间。

最简单的解决方法——如果您被迫使用像 CentOS 7 这样的旧发行版——就是在运行 yum 之前减少限制:

FROM centos:7

RUN echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' > /etc/nsswitch.conf

RUN yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
RUN ulimit -n 1024 && yum -q install -y docker-ce docker-ce-cli containerd.io

# -- Install OS packages:
RUN ulimit -n 1024 && yum -q update -y && yum -q install -y \
    bash \
    bzip2-devel \
    ca-certificates \
    curl \
    epel-release \
    gcc \
    gcc-c++ \
    git \
    gnutls \
    gnutls-devel \
    libffi-devel \
    make \
    ncurses-devel \
    openssh-clients \
    openssh-server \
    openssl \
    openssl-devel \
    rsync \
    readline-devel \
    tar \
    unzip \
    wget \
    zip \
    zlib-devel \
    temurin-11-jdk
Run Code Online (Sandbox Code Playgroud)

使用上面的 Dockerfile:

$ time docker build -t yumtest .
[...]
Successfully built e5ae777ff3ff
Successfully tagged yumtest:latest

real    1m2.668s
user    0m0.008s
sys     0m0.015s
Run Code Online (Sandbox Code Playgroud)