当我试图构建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
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
我试着构建其他centos映像,它构建得很好,甚至尝试了Ubuntu和其他随机映像。此问题仅在此Dockerfile
中存在。你正在击中这个错误(也看到这个拉请求与修复)。旧版本的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
使用上面的Dockerfile:
$ time docker build -t yumtest .
[...]
Successfully built e5ae777ff3ff
Successfully tagged yumtest:latest
real 1m2.668s
user 0m0.008s
sys 0m0.015s