运行后:
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
关于如何解决此范围的建议来自:
"It's a DNS lookup error. Just add google DNS servers (8.8.8.8, 8.8.4.4) to your Docker host's deamon config file."
... 到 ...
"Add the following to your 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
目录感觉就像一个黑客。我的 hack 有效,但是这个错误的根本原因是什么,谁应该修复它?
最佳答案
--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
关于linux - 在 Docker 容器中更新 apk 期间出现错误的文件描述符错误......为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48736212/