手动添加密钥?由于公钥不可用,无法验证以下签名:NO_PUBKEY

手动添加密钥?由于公钥不可用,无法验证以下签名:NO_PUBKEY

我正在尝试在 Docker 中使用 Ubuntu 20.04 或 Ubuntu 22.04。我的Dockerfile是:

from ubuntu:22.04
run DEBIAN_FRONTEND=noninteractive apt update

我使用 构建了它docker build .。结果是:

Sending build context to Docker daemon  2.048kB
Step 1/2 : from ubuntu:22.04
---> 2dc39ba059dc
Step 2/2 : run DEBIAN_FRONTEND=noninteractive apt update
---> Running in b15002ae9dd5

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB] 
Get:2 http://security.ubuntu.com/ubuntu jammy-security 
InRelease [110 kB] 
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB] 
Get:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB] Err:1 http://archive.ubuntu.com/ubuntu jammy InRelease   
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 871920D1991BC93C 

我多次收到此消息,直到我收到:

W: http://archive.ubuntu.com/ubuntu/dists/jammy/InRelease: The key(s) in the keyring /etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg are ignored as the file is not readable by user '_apt' executing apt-key.

我曾尝试将其chmod a+rwx /etc/apt -R作为第一个run命令,Dockerfile但没有什么区别。

我也明确运行过docker pull ubuntu:22.04,它说它已经是最新的。我对ubuntu:20.04图像有完全相同的问题。

我查阅了所有其他涉及此问题的网络资源,但它们都要求我能够运行apt install apt-key或其他操作,但我无法更新,apt所以什么都不起作用,除了搜索引擎点击的前三页只显示如何在 Ubuntu 上安装 Docker,而不是相反。

我也尝试过--security-opt seccomp:unconfined另一个答案中提到的方法。该答案的回复是Error response from daemon: The daemon on this platform does not support setting security options on build

所以我的图像没有curlwget或者gnupg,如果不让这个工作,我就无法安装它。当我用它做任何事情时,apt-key我得到:E: gnupg, gnupg2 and gnupg1 do not seem to be installed, but one of them is required for this operation

我已经设法gnupg从 deb 文件手动安装,并手动接收密钥,但它给出了类似的错误消息:

# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
Executing: /tmp/apt-key-gpghome.rQuYmKpjpo/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C
gpg: requesting key 991BC93C from hkp server keyserver.ubuntu.com
gpg: key 991BC93C: public key "Ubuntu Archive Automatic Signing Key (2018) <[email protected]>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA:  1)
W: The key(s) in the keyring /etc/apt/trusted.gpg.d/ubuntu-keyring-2018-archive.gpg are ignored as the file is not readable by user '' executing apt-key.

我也尝试过将数量减少/etc/apt/source.list到最低限度。同样的问题。

如何从主机添加所需的密钥?

第二个问题是,这样一个主流的工具和发行版怎么会被破坏?还是我做了一些愚蠢而明显的错误?大家都转向别的东西了吗?那是什么?我的互联网接入不太好,所以跟上计算机世界的最新动态是一项挑战。

答案1

您一直在尝试解决错误的问题。

从 Ubuntu 20 开始,Ubuntu 使用更安全的系统调用,在旧版本的 docker 上会导致权限错误而不是“不支持”错误,从而导致误导性错误消息。虽然从技术上讲可以在 Ubuntu 镜像中修补它,但这会使它们的安全性降低,因此这不是一个长期的解决方案。

目前为止最简单的解决方案是更新docker

一个不可持续的替代方案是暂时恢复到ubuntu:18.04

答案2

我没有研究这个问题的确切原因,但运行选项会有所帮助。我在 Podman 实现的 Docker 实用程序上测试了这一点。这也--security-opt seccomp=unconfined应该适用于原始版本。docker

 λ podman run --rm --security-opt seccomp=unconfined -it ubuntu:22.04 /bin/bash                     
root@1e910696dd09:/# apt update
Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]            
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB]              
Get:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Get:5 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages [1792 kB]
Get:6 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages [578 kB]
Get:7 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 Packages [480 kB]
Get:8 http://security.ubuntu.com/ubuntu jammy-security/multiverse amd64 Packages [4644 B]
Get:9 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages [756 kB]
Get:10 http://archive.ubuntu.com/ubuntu jammy/restricted amd64 Packages [164 kB]
Get:11 http://archive.ubuntu.com/ubuntu jammy/multiverse amd64 Packages [266 kB]        
Get:12 http://archive.ubuntu.com/ubuntu jammy/universe amd64 Packages [17.5 MB]           
Get:13 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [880 kB]         
Get:14 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages [939 kB]
Get:15 http://archive.ubuntu.com/ubuntu jammy-updates/multiverse amd64 Packages [16.9 kB]
Get:16 http://archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages [528 kB]
Get:17 http://archive.ubuntu.com/ubuntu jammy-backports/universe amd64 Packages [7290 B]
Get:18 http://archive.ubuntu.com/ubuntu jammy-backports/main amd64 Packages [3175 B]
Fetched 24.5 MB in 6s (4365 kB/s)                
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
root@1e910696dd09:/#

答案3

这不是解决方案,而只是为那些只想快速完成任务以进行快速学习/实验的人提供的建议。如上所述,这些错误的发生是由于改进的 ubuntu 系统调用和您的 docker 版本较旧。

您可以将 ubuntu 映像从 降级ubuntu:latestubuntu:18.04,并且一切都应按预期工作。

答案4

ubuntu:22.04我在基于Raspberry Pi ( )构建镜像时遇到了类似的问题armhf。问题出在主机的 libseccomp 库上。

解决方案记录在这里:https://docs.linuxserver.io/faq

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC 648ACFD622F3D138
echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee -a /etc/apt/sources.list.d/buster-backports.list
sudo apt update
sudo apt install -t buster-backports libseccomp2

重新启动后,我就可以运行apt-get update并且不会出现错误。

相关内容