至少遇到一个无效签名

我正在尝试使用 minikube 构建和部署微服务映像到在我的开发机器上运行的单节点 Kubernetes 集群。我正在使用谷歌的云本地微服务演示应用在线精品来理解像 Kubernetes、 Istio 等技术的使用。

链接到 github repo: 微服务演示

在执行安装过程以及运行命令 skaffold run来构建和部署应用程序时,出现了一些错误:

Step 10/11 : RUN apt-get -qq update     && apt-get install -y --no-install-recommends         curl
---> Running in 43d61232617c
W: GPG error: http://deb.debian.org/debian buster InRelease: At least one invalid signature was encountered.
E: The repository 'http://deb.debian.org/debian buster InRelease' is not signed.
W: GPG error: http://deb.debian.org/debian buster-updates InRelease: At least one invalid signature was encountered.
E: The repository 'http://deb.debian.org/debian buster-updates InRelease' is not signed.
W: GPG error: http://security.debian.org/debian-security buster/updates InRelease: At least one invalid signature was encountered.
E: The repository 'http://security.debian.org/debian-security buster/updates InRelease' is not signed.
failed to build: couldn't build "loadgenerator": unable to stream build output: The command '/bin/sh -c apt-get -qq update     && apt-get install -y --no-install-recommends         curl' returned a non-zero code: 100

我在尝试构建加载生成器时收到这些错误。 我该如何解决这个问题?

67018 次浏览

出现这些错误的原因有以下几个:

  1. 现有的缓存和/或磁盘空间可能有问题。为了修复它,您需要通过执行: sudo apt-get cleansudo apt-get update来清除 APT 缓存。

  2. 现有的 Docker 映像也是如此。执行: docker image prune -fdocker container prune -f,以删除未使用的数据和自由磁盘空间。

  3. 如果不关心安全风险,可以尝试使用 --allow-unauthenticated--allow-insecure-repositories标志运行 apt-get命令。根据 医生:

忽略无法验证的包,不要提示它。 这在使用本地存储库时非常有用,但是它是一个 如果不能以其他方式确保数据的真实性,则存在巨大的安全风险 由使用者自己。

如果有帮助请告诉我。

我认为这与 docker 官方映像(在本例中为 armhf)的一些 LSM 组件和 exec/ability 权限有关。在这种简单的情况下 Sid风味是无法正确处理时间。而这与证书检查有关,是造成签名无效的原因。它也发生在 ubuntu 焦点。

# docker run -it debian:buster /bin/date
Sun Nov 15 11:30:44 UTC 2020
# docker run -it debian:sid /bin/date
Thu Jan  1 00:00:00 UTC 1970

我经常看到这种情况的原因是因为 docker 已经耗尽了磁盘空间,这令人沮丧,因为该错误几乎没有提示这就是问题所在。首先尝试使用 prune命令 https://docs.docker.com/config/pruning/清除不需要的图像和容器。

$ docker image prune
$ docker container prune

如果你已经积累了很多图片,并且想要删除所有与现有容器无关的图片,那么试一下:

$ docker image prune -a

或者你可以只删除旧的图片:

$ docker image prune -a --filter "until=24h"

最后,在 MacOS 上,Docker 运行在一个专用的 VM 中,可能需要增加 Docker 桌面应用程序中可用的磁盘(设置-> 资源-> 高级-> 磁盘映像大小)。

我也遇到过同样的问题,之前的回复中没有一个说修剪图像或容器是有效的。原因是我的 Docker Build Cache 占用了大部分空间。运行下面的命令解决了这个问题:

docker system prune

然后,你可以通过运行以下命令来检查它是否有效:

docker system df

更新:

以上命令将清除整个 Docker 系统。如果只想清除生成缓存,可以使用下面的命令(归功于 Sarah Gahl) :

docker builder prune

用 x64制作自己的 sid 图像

# variables
$WORKPLACE=/space_change_me
$BASEIMG=debian:buster
$TAG=my/debian
$RELEASE=sid
$PLATFORM=arm


# multiarch preparation
apt-get update
apt-get -y install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get -y install qemu binfmt-support qemu-user-static docker-ce byobu make
export DOCKER_CLI_EXPERIMENTAL=enabled


#build image
docker run  -i --rm -v $WORKPLACE:/data $BASEIMG /bin/bash  << EOF
export DEBIAN_FRONTEND="noninteractive"
apt-get -y update
apt-get -y install debootstrap
debootstrap --verbose --include=iputils-ping --arch $PLATFORM $RELEASE /data/$RELEASE-$PLATFORM $REPO
chroot /data/$RELEASE-$PLATFORM/ /bin/bash << SEOF
export DEBIAN_FRONTEND="noninteractive"
apt-get -y update
apt-get -y upgrade
apt-get -y clean
SEOF
rm -R /data/$RELEASE-$PLATFORM/debootstrap
EOF


cd $WORKPLACE/$RELEASE-$PLATFORM
tar cpf - . | docker import - $TAG:$RELEASE-$PLATFORM --platform $PLATFORM
docker save $TAG:$RELEASE-$PLATFORM  > debian-$RELEASE-$PLATFORM.tar

您可以稍后在手臂主机中加载

cat debian-$RELEASE-$PLATFORM.tar |docker load

至少遇到一个无效签名

该错误表明 /var/lib/apt/lists中的一个文件至少包含一个无效/损坏的签名(可能是由于 apt-key误用或其他原因造成的)。

尝试使用调试消息运行 Apt 更新:

apt-get -oDebug::pkgAcquire::Worker=1 update

它应该指向损坏的文件,例如。

0% 【工作】 <-gpgv: 400% 20URI% 20失败% 0aMessage:% 20At% 20less% 20one% 20void% 20sign% 20 was% 20  遭遇。% 0aURI:% 20gpgv:/var/lib/apt/list/part/CorruptedFile _ Inrelease

编辑文件,找到并删除损坏的部分,或删除整个文件,以便可以重新创建。

这些对我来说都不起作用,但这个命令却起到了作用:

docker volume prune

字面上有249GB 的卷,我能够收回。

@ 杰克 · 考威尔说对了。

docker builder prune

这个命令可以解决问题。 小心“ 码头系统修剪机”命令,因为它会删除你所有的图像(非常具有破坏性)。 生成器修剪只删除生成缓存,生成缓存中包含以前的所有(缓存)生成步骤。

我尝试了上面的几个答案,没有一个对我有用。真正的触发器是当我使用 @ Wytrzyma y Wiktor回答中的 --allow-unauthenticated--allow-insecure-repositories时,我得到了一个显示

tar: ./conffiles: Cannot utime: Operation not permitted
tar: ./control: Cannot utime: Operation not permitted
tar: ./md5sums: Cannot utime: Operation not permitted
tar: ./postinst: Cannot utime: Operation not permitted
tar: .: Cannot utime: Operation not permitted
tar: Exiting with failure status due to previous errors

这让我找到了 这篇文章,它表明问题可能是 libseccomp2过时了。

The fix there was to do:

# Get signing keys to verify the new packages, otherwise they will not install
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC 648ACFD622F3D138


# Add the Buster backport repository to apt sources.list
echo 'deb http://httpredir.debian.org/debian buster-backports main contrib non-free' | sudo tee -a /etc/apt/sources.list.d/debian-backports.list


sudo apt update ; sudo apt install libseccomp2 -t buster-backports

请注意,这里假设您在19.04之后使用 Raspbian 和 docker 版本

我也有同样的问题。看起来空间不够。我已经删除了旧的图像,它开始工作。

$ docker images

选择那些你不再关心的(删除)。

$ docker rmi <image_id>

下面的命令筛选悬空图像并删除这些图像。

docker rmi $(docker images -q --filter "dangling=true")

@ BoyArmy _ 89解决了我的类似问题; 我尝试了所有其他解决方案,但只有以下方法有效:

docker volume prune

在我的情况下,我试图运行一个 Docker debian:stable(目前的靶心)在一个覆盆子 PI 与 buster发行版的操作系统。

换成 debian:buster就成功了

希望这能帮到别人