我正在尝试在 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
。
所以我的图像没有curl
,wget
或者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:latest
到ubuntu: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
并且不会出现错误。