在 Docker 构建中没有对存储库进行签名

我有以下 Dockerfile,它使用了从 dockerhub 提取的最新 Ubuntu 映像:

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

当我启动 docker build 命令时,会发生以下错误:

错误: 2 http://archive.ubuntu.com/ubuntu仿生上市 至少遇到一个无效签名。

错误: 1 http://security.ubuntu.com/ubuntu仿生安全上市 至少遇到一个无效签名。

错误: 3 http://archive.ubuntu.com/ubuntu仿生更新在发布 至少遇到一个无效签名。

错误: 4个 http://archive.ubuntu.com/ubuntu仿生后端口在发布 至少遇到一个无效签名。

阅读包裹清单..。

W: GPG 错误: http://archive.ubuntu.com/ubuntu仿生放行: 至少遇到一个无效签名。 E: 存储库“ http://archive.ubuntu.com/ubuntu仿生 InRelease”没有签名。

W: GPG 错误: http://security.ubuntu.com/ubuntu仿生安全 InRelease: 至少遇到一个无效签名。 E: 存储库“ http://security.ubuntu.com/ubuntu仿生安全 InRelease”没有签名。

W: GPG 错误: http://archive.ubuntu.com/ubuntu仿生更新 InRelease: 至少遇到一个无效签名。 E: 存储库“ http://archive.ubuntu.com/ubuntu仿生更新 InRelease”没有签名。

W: GPG 错误: http://archive.ubuntu.com/ubuntu仿生背端口 InRelease: 至少遇到一个无效签名。 E: 存储库“ http://archive.ubuntu.com/ubuntu仿生-后端口 InRelease”没有签名。

我在这里读到 https://superuser.com/questions/1331936/how-can-i-get-past-a-repository-is-not-signed-message-when-attempting-to-upgr,您可以使用—— allow-unenticated 或—— allow-Security-Repository 来传递这个错误,但是在我看来,这两种方法都可能会破坏容器的安全性。

剪辑

尝试使用 ubuntu: 18.04,ubuntu: 19:04,ubuntu: 19.10相同的错误和不同的发行版名

84906 次浏览

显然,我的根分区已经满了(也许我已经尝试了太多次通过 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

docker image prune -f

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

我的两台机器中的一台出了问题

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

这里的关键点在于,在正常工作的机器上,我把 auf 作为存储驱动程序,而在故障的机器上,它是重叠的。在我更改之后,所有权限都是正确的。

Docker API v1.25 + (发布日期: 2019年11月18日)

运行下面的命令为我解决了这个问题:

docker system prune --force

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

此外,您可能想尝试一下 prune 音量命令:

docker volume prune --force

后来我又试了一次,成功了。

来自 https://github.com/docker-library/php/issues/898#issuecomment-539234070:

这通常意味着镜像出现了问题(可能部分出了问题) 日期; 即不完全同步从其他镜像)和经常 把自己弄干净。

正如@Danila 和@Andriy 指出的那样,这个问题很容易解决:

docker image prune -f
docker container prune -f

但是发布这个答案,因为只运行其中一个对我来说不起作用(在 MacOS X上)-但是运行两个都起作用。

如果使用 Docker Desktop,请注意在设置中指定的最大磁盘映像大小。如果在构建过程中它满了,就会导致问题。

enter image description here

对于 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

这解决了我的问题。

原文为 给你

我不得不用 --security-opt seccomp:unconfined运输集装箱。

这对我有帮助:

 docker volume prune

我将 --network=host添加到 build 命令中。

docker build --network=host -t REPOSITORY:TAG  ./

这招对我很管用 docker system prune -af --volumes 还有这些

docker image prune
docker container prune
docker builder prune
docker volume prune

这正在运行 docker system df,并查看是否需要在其中一个卷上留有空闲空间