跑完后:
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
有关如何解决此范围的建议:
"它是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
目录的命令感觉就像是黑客。
我的黑客有效,但是这个错误的根本原因是什么?谁应该修复它?
答案 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