Docker构建时出现“Repository is not signed”的问题

205

我有一个Dockerfile,使用从dockerhub拉取的最新Ubuntu镜像:

FROM ubuntu:latest  
RUN apt-get update  && apt-get install -y  g++ llvm lcov 

当我执行docker build命令时,会出现以下错误:
Err:2 http://archive.ubuntu.com/ubuntu bionic InRelease 
At least one invalid signature was encountered.

Err:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
  At least one invalid signature was encountered.

Err:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease
  At least one invalid signature was encountered.

Err:4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease
  At least one invalid signature was encountered.

Reading package lists...

W: GPG error: http://archive.ubuntu.com/ubuntu bionic InRelease: At least one invalid signature was encountered.
E: The repository 'http://archive.ubuntu.com/ubuntu bionic InRelease' is not signed.

W: GPG error: http://security.ubuntu.com/ubuntu bionic-security InRelease: At least one invalid signature was encountered.
E: The repository 'http://security.ubuntu.com/ubuntu bionic-security InRelease' is not signed.

W: GPG error: http://archive.ubuntu.com/ubuntu bionic-updates InRelease: At least one invalid signature was encountered.
E: The repository 'http://archive.ubuntu.com/ubuntu bionic-updates InRelease' is not signed.

W: GPG error: http://archive.ubuntu.com/ubuntu bionic-backports InRelease: At least one invalid signature was encountered.
E: The repository 'http://archive.ubuntu.com/ubuntu bionic-backports InRelease' is not signed.

我在这里阅读到https://superuser.com/questions/1331936/how-can-i-get-past-a-repository-is-not-signed-message-when-attempting-to-upgr,据说你可以使用--allow-unauthenticated或--allow-insecure-repositories通过此错误,但这两种方法似乎都是权宜之计,可能会危及容器的安全性。 编辑 尝试拉取ubuntu:18.04、ubuntu:19:04、ubuntu:19.10,不同发行版名称但出现相同错误。

你是在代理服务器后面工作吗? - 7_R3X
@7_R3X 不,完全不是。 - Antonio La Marra
除了使用latest,您尝试过ubuntu:18.04吗? - Govinda Malavipathirana
是的,我尝试过19.04和19.10。 - Antonio La Marra
我尝试拉取一个更新的镜像,成功了。看起来镜像中有一些 bug。 - Sergey Ponomarev
14个回答

369

显然我的根分区已满(可能是因为我尝试了太多次通过apt下载包),运行sudo apt clean解决了问题。


此外,以下命令应该有助于清理空间:

docker system df # which can show disk usage and size of 'Build Cache'
docker image prune # add -f or --force to not prompt for confirmation
docker container prune # add -f or --force to not prompt for confirmation

130
使用 docker image prunedocker container prune 解决了我的问题。 - Erik Schnetter
4
"docker image prune" 在我的硬盘上节省了 52GB 的空间,并使我的构建重新运行,感谢 Antonio 和 Erik! - eerne
6
有人能解释一下为什么会发生这种失败吗?这让我对 Docker 的理解产生了困惑:似乎在运行之间保留了一些状态,这些状态使得运行变得不确定。 - David 天宇 Wong
37
我尝试了以上所有方法,但我的问题在清理 Docker 构建缓存后得到解决。首先我查看了我的 Docker 使用情况:docker system df,发现我的构建缓存大小超过了50GB。然后我使用命令 docker builder prune 清理了它。 - Raashid
5
太棒了……这就是解决方法,我一直盯着所有东西却没有意识到我的根分区已经用完空间了。 - Antti Haapala -- Слава Україні
显示剩余9条评论

135

自 Docker API v1.25+(发布于2019年11月18日)以来

对我而言,运行以下命令解决了问题:

docker system prune --force

--force标志代表非交互式修剪。

此外,您可能想尝试修剪卷命令:

docker volume prune --force

“docker system prune” 对我来说不够,我还需要删除镜像并运行 “docker volume prune” 来解决问题。 - Jonas Eicher
感谢 @JonasEicher,我已将你的案例包含在答案中。 - Andriy Ivaneyko
2
这些可以合并成一个命令:docker system prune --all --force --volumes - houtanb
1
感谢分享@AndriyIvaneyko!运行docker system prune --force可行。 - xserrat
@xserrat 当然,很高兴它对你有用! - Andriy Ivaneyko

58

修复自

docker image prune -f

看起来 Docker 在主机系统上有一个最大 apt 缓存大小的限制


3
我需要运行 docker volume rm $(docker volume ls -q) 命令。 - tschumann

40
如果您正在使用Docker Desktop,请注意在设置中指定的磁盘镜像最大大小。如果在构建过程中磁盘已满,可能会导致问题(source)。

enter image description here


4
谢谢您——扩大磁盘映像大小资源和修剪我的系统都为我解决了在Docker/Mac上的问题。 - Michael Bordash
2
谢谢!对我有用。奇怪的是apt-get没有更清楚地说明这个问题。 - david.schreiber
2
增加磁盘映像大小对我很有帮助,谢谢 :) - P. Sithole

31

对于Raspbian系统,可以通过以下方式手动升级主机系统的libseccomp:

curl http://ftp.us.debian.org/debian/pool/main/libs/libseccomp/libseccomp2_2.5.1-1_armhf.deb --output libseccomp2_2.5.1-1_armhf.deb
sudo dpkg -i libseccomp2_2.5.1-1_armhf.deb

这解决了我的问题。

原帖在这里


是的,就是这样!看来这仅适用于armhf-Raspberry OS。在我的64位服务器上一切正常。 - Christopher Gertz
我也解决了。谢谢。 - Vinicius Tinti

15

正如@Danila和@Andriy指出的那样,这个问题可以很容易地通过运行以下命令来解决:

docker image prune -f
docker container prune -f

但是我发布这个答案时,只运行其中一个在MacOS X上不起作用-然而同时运行两者就可以。


8

这对我有帮助:

 docker volume prune

4

我必须使用--security-opt seccomp:unconfined参数来运行容器。


3

我的两台机器中的一台出现了这个问题。执行ls -ld /tmp命令,我得到了以下结果:

drwxrwxrwt 3 root root 4096 May 15 20:46 /tmp

针对工作环境

drwxr-xr-t 1 root root 4096 May 26 05:44 /tmp

对于出现故障的机器,我执行了 chmod 1777 /tmp,然后它就正常运行了!!
编辑:
所以,我深入研究了这个问题,并意识到存在根本性问题。我将我的问题放在另一个问题中,并随后找到了自己解决此问题的答案:https://stackoverflow.com/a/62088961/7387935 关键点在于,在机器上正确工作时,我使用了aufs作为存储驱动程序,而在有问题的机器上使用overlay2。更改后,所有权限都正确了。

这个对我起作用了。我把tmp文件夹移到了另一个驱动器,并在根文件夹中放置了一个符号链接。这开始引起签名和许多其他错误的问题。我按照你在这里所解释的做法去做了,但然后我把tmp文件夹移回了根目录并删除了符号链接。也许我只是会把tmp文件夹留在它应该呆的地方。 - tavalendo

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接