75

我正在尝试使用 minikube 构建微服务映像并将其部署到在我的开发机器上运行的单节点 Kubernetes 集群。我正在使用 Google 的云原生微服务演示应用程序 Online Boutique 来了解 Kubernetes、Istio 等技术的使用。

链接到 github 仓库:microservices-demo

在遵循安装过程并运行命令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

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

4

10 回答 10

107

遇到这些错误的原因有几个:

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

  2. 现有的 docker 镜像也是如此。执行:为了删除未使用的数据并释放磁盘空间docker image prune -fdocker container prune -f

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

如果包无法通过身份验证,则忽略并且不提示。这在使用本地存储库时可能很有用,但如果用户本身无法以其他方式确保数据真实性,则会带来巨大的安全风险。

请让我知道这是否有帮助。

于 2020-06-22T09:07:14.017 回答
79

我遇到了同样的问题,之前对修剪图像或容器的回应都没有奏效。原因是我的 Docker Build Cache 占用了大部分空间。运行以下命令解决了这个问题:

docker system prune

然后,您可以通过运行检查它是否有效:

docker system df

更新:

上述命令将清除整个 Docker 系统。如果您只想清除构建缓存,可以使用以下命令(归功于saraf.gahl):

docker builder prune
于 2020-12-31T17:38:53.460 回答
25

我通常看到这个的原因是因为 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"

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

于 2020-12-19T13:13:36.397 回答
10

我认为这与 docker 官方映像(在本例中为 armhf)的某些 LSM 组件和 exec/capabilities 权限有关。在这种简单的情况下, 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
于 2020-11-15T11:39:01.280 回答
7

这些都不适合我。这个命令虽然成功了:

docker volume prune

从字面上看,我可以回收 249GB 的卷。

于 2021-07-23T20:55:05.707 回答
6

@Jack Kawell 做对了。

docker builder prune

这个命令可以解决问题。当心命令“ docker system prune ”,因为这会删除你所有的图像(非常具有破坏性)。builder prune 仅删除构建缓存,这是您拥有所有先前(缓存)构建步骤的位置。

于 2021-10-26T21:14:20.307 回答
6

我尝试了上述几个答案,但没有一个对我有用。真正的触发因素是当我使用--allow-unauthenticated--allow-insecure-repositories来自@Wytrzymały Wiktor回答时,我收到一条通知显示

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 已过时。

修复是要做的:

# 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

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

于 2021-11-04T09:45:37.493 回答
4

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

$ docker images

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

$ docker rmi <image_id>

于 2021-12-21T11:02:20.853 回答
0

在 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

您可以稍后在 arm 主机中加载

cat debian-$RELEASE-$PLATFORM.tar |docker load
于 2021-05-05T07:21:17.753 回答
0

遇到至少一个无效签名

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

尝试使用调试消息运行 Apt update:

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

这应该将您指向损坏的文件,例如

0% [工作] <- gpgv:400%20URI%20Failure%0aMessage:%20At%20least%20one%20invalid%20signature%20was%20encountered.%0aURI:%20gpgv:/var/lib/apt/lists/partial/CorruptedFile_InRelease

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

于 2021-06-09T23:40:29.823 回答