在Docker容器中更新apk期间错误的文件描述符ERROR ...为什么?

时间:2018-02-11 20:40:01

标签: linux docker dockerfile devops alpine

跑完后:

docker network rm $NETNAME
docker network create --driver bridge $NETNAME --subnet "${SUBNET}0/24"
docker run --name $NODENAME -it --net $NETNAME --ip 192.168.0.2 --volume --detach $IMGNAME

在容器内部,以root用户身份运行apk udpdate

# apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.7/main: Bad file descriptor
WARNING: Ignoring APKINDEX.70c88391.tar.gz: Bad file descriptor
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.7/community: Bad file descriptor
WARNING: Ignoring APKINDEX.5022a8a2.tar.gz: Bad file descriptor
2 errors; 33 distinct packages available

...并点击Bad file descriptor错误。

还有其他一些人遇到了同样的错误:

CDN seems to be down and cannot get mirrors working #280

Repository problem? #279

有关如何解决此范围的建议:

  

"它是DNS查找错误。只需将Google DNS服务器(8.8.8.8,8.8.4.4)添加到Docker主机的deamon配置文件中即可。"

...到......

  

"将以下内容添加到Dockerfile:"

     

RUN echo http://mirror.yandex.ru/mirrors/alpine/v3.5/main > /etc/apk/repositories; \ echo http://mirror.yandex.ru/mirrors/alpine/v3.5/community >> /etc/apk/repositories

(你应该做。不要从非官方来源添加包裹。)

解决方案

解决方案很简单。将这两行添加到您的RUN命令:

rm -rf /var/cache/apk && \
mkdir /var/cache/apk && \

在Dockerfile中......

RUN apk add --update --no-cache bash \
    git \
    make \
    clang \
    g++ \
    go && \
    mkdir -p $REPO && \
    mkdir -p $GODIR/src && \
    rm -rf /usr/share/man && \
    rm -rf /var/cache/apk && \
    mkdir /var/cache/apk && \
    apk del git clang

添加删除和重新创建/var/cache/apk目录的命令感觉就像是黑客。

我的黑客有效,但是这个错误的根本原因是什么?谁应该修复它?

1 个答案:

答案 0 :(得分:0)

--no-cache选项允许不在本地缓存索引。 这有助于保持容器的小巧。

此外,它等效于顶部的apk update和末尾的rm -rf /var/cache/apk/

因此您可以尝试以这种方式使用它:

RUN apk add --update --no-cache bash \
    git \
    make \
    clang \
    g++ \
    go && \
    mkdir -p $REPO && \
    mkdir -p $GODIR/src && \
    rm -rf /usr/share/man && \
    apk del git clang