我在运行以下命令以在 Ubuntu 服务器中安装 docker 和 kubernetes 时收到以下错误消息。
root@master:/home/ubuntu# add-apt-repository
> "deb [arch=amd64] https://download.docker.com/linux/ubuntu
> $(lsb_release -cs)
> stable"
Hit:1 http://in.archive.ubuntu.com/ubuntu bionic InRelease
Get:2 https://download.docker.com/linux/ubuntu bionic InRelease [64.4 kB]
Hit:3 http://in.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:4 http://in.archive.ubuntu.com/ubuntu bionic-backports InRelease
Hit:5 http://in.archive.ubuntu.com/ubuntu bionic-security InRelease
**Err:2 https://download.docker.com/linux/ubuntu bionic InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8**
Reading package lists... Done
W: GPG error: https://download.docker.com/linux/ubuntu bionic InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8
**E: The repository 'https://download.docker.com/linux/ubuntu bionic InRelease' is not signed.**
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
root@master:/home/ubuntu#
我也运行了以下命令,但没有运气
root@master:/# sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7EA0A9C3F273FCD8
Executing: /tmp/apt-key-gpghome.rDOuMCVLF2/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 7EA0A9C3F273FCD8
gpg: keyserver receive failed: No keyserver available
我遇到了这个确切的问题。 我相信这是由我的默认 umask 引起的,这导致某些 Docker 文件以不正确的权限安装。 我能够通过更正 docker 密钥文件的文件权限来修复它:
sudo chmod a+r /usr/share/keyrings/docker-archive-keyring.gpg
编辑:这个答案显然不再有效
运行以下命令以添加正确的密钥:
# Does not work any more
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
来源:https://docs.docker.com/install/linux/docker-ce/ubuntu/
首先,添加 Docker 的官方 GPG 密钥:
sudo mkdir -p /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
或其他情况 (macOS(
sudo mkdir -p /usr/share/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor --yes -o /usr/share/keyrings/docker-archive-keyring.gpg
PS对于某些人来说,gpgp --dearmor
部分很有用。
其次,更新它的权限:
sudo chmod a+r /etc/apt/keyrings/docker.gpg
或其他情况 (macOS(
sudo chmod a+r /usr/share/keyrings/docker-archive-keyring.gpg
在 Ubuntu 上安装 Docker 引擎 - 官方 Docker 文档
Debian 测试存在问题(靶心(:
警告:apt-key 已弃用。改为在 trusted.gpg.d 中管理密钥环文件(参见 apt-key(8((。
但可以通过以下方式解决:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
来自: https://docs.docker.com/engine/install/ubuntu/它适用于 ubuntu 20.04
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
sudo apt-get update
sudo apt-get --assume-yes install docker-ce docker-ce-cli containerd.io
确保/usr/share/keyrings/docker-archive-keyring.gpg 是全局可读的。
# ls -l /usr/share/keyrings/docker-archive-keyring.gpg
-rw-rw---- 1 root root 2760 Aug 17 06:46 /usr/share/keyrings/docker-archive-keyring.gpg
strace -f apt update 2>&1 | grep docker-archive-keyring
[pid 9453] faccessat(AT_FDCWD, "/usr/share/keyrings/docker-archive-keyring.gpg", R_OK) = -1 EACCES (Permission denied)
# chmod o+r /usr/share/keyrings/docker-archive-keyring.gpg
# strace -f apt update 2>&1 | grep docker-archive-keyring
[pid 9772] faccessat(AT_FDCWD, "/usr/share/keyrings/docker-archive-keyring.gpg", R_OK) = 0
[pid 9795] openat(AT_FDCWD, "/usr/share/keyrings/docker-archive-keyring.gpg", O_RDONLY) = 4
[pid 9795] access("/usr/share/keyrings/docker-archive-keyring.gpg", F_OK) = 0
[pid 9795] access("/usr/share/keyrings/docker-archive-keyring.gpg", R_OK) = 0
[pid 9795] openat(AT_FDCWD, "/usr/share/keyrings/docker-archive-keyring.gpg", O_RDONLY) = 6
[pid 9795] openat(AT_FDCWD, "/usr/share/keyrings/docker-archive-keyring.gpg", O_RDONLY) = 7
[pid 9795] openat(AT_FDCWD, "/usr/share/keyrings/docker-archive-keyring.gpg", O_RDONLY) = 8
这是错误
W: GPG error: https://download.docker.com/linux/ubuntu bionic InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8
复制NO_PUBKEY
后面的密钥并执行
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys <the key>
确保将<the key>
替换为您复制的密钥
然后再次运行您的命令
对于 22.04,我必须做:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg
具体来说,让输出转到/etc/apt/trusted.gpg.d/docker.gpg
您可以获得"公钥不可用"的原因有很多,上面列出了大多数原因。然而,我最近遇到了一个意想不到的。
我相信在 20.04 到 22.04 之间的某个地方,适当的行为发生了变化。两个版本都支持装甲 gpg 密钥(从 1.4 开始,大约在 2017 年(。但有一个区别:
- 在 20.04 中,apt v2.0 接受扩展名为
.gpg
的文件的装甲密钥 - 在 22.04 apt v2.4 IGNORES 装甲键中,如果它们具有
.gpg
扩展名。它要求他们有一个.asc
或.pub
扩展名。
当一个经过测试且稳定的 ansible 剧本安装 docker 在切换到 22.04 后停止工作时,这有点令人费解。更改文件扩展名解决了该问题。
如果您确实遵循了在 Ubuntu 上安装 Docker 引擎的步骤,请参阅您的权限文件/usr/share/keyrings/
。
应该是-rw-r--r-- 1 root root 2.7K Sep 13 05:46 docker-archive-keyring.gpg
-rw-r--r--
我在它-rw-r-----
-rw-r--r--
之前更改了权限 使用此命令
sudo chmod o+r /usr/share/keyrings/docker-archive-keyring.gpg
然后使用 apt update 检查它,它对我有用。
> Ubuntu 20.04,这是你应该做的:
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
而不是
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
在 docker 网站上,这条线得到了更新,/usr/share/keyrings/docker-archive-keyring.gpg
变得/etc/apt/keyrings/docker.gpg
。
就我而言,有必要检查存储库是否已在/etc/apt/sources.list.d/
中正确指定。
具体来说,就我而言,我删除了该文件:/etc/apt/sources.list.d/download_docker_com_linux_ubuntu.list
.
我在 Ubuntu 22.04 中安装 docker 时遇到了这个问题。 虽然我没有花时间了解我错过了什么,但我发现这个链接对此有所帮助。在 ubuntu 22.04 中安装 docker
就我而言,我使用的是不支持的操作系统版本的 Ubuntu(14.04.6 LTS(。确保将您的操作系统版本与此处提到的支持版本进行比较 https://docs.docker.com/engine/install/ubuntu/#os-requirements
我之所以来到这里,是因为我试图通过将他们的存储库添加到 apt 配置中来在 Ubuntu 22.04.1 上安装 Docker。我正在建立一个可识别的剧本来做到这一点。
像上面的许多其他人一样,我遇到了The following signatures couldn't be verified because the public key is not available: NO_PUBKEY ...**
错误的问题。
我最终选择了以下几件安斯布来完成工作:
- name: setting up docker apt repo
block:
- name: get docker gpg key
become: true
get_url:
url: https://download.docker.com/linux/ubuntu/gpg
dest: /usr/share/keyrings/docker-archive-keyring-armored.gpg
- name: CMD - process docker key
become: true
shell:
cmd: cat /usr/share/keyrings/docker-archive-keyring-armored.gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- name: configure docker apt source
become: true
apt_repository:
repo: "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable"
state: present
把这个放在这里,给下一个想要做到这一点的可怜的草皮。
In file sources.list -> 在指定存储库的行中,您需要在地址之前添加一个条目(方括号中(
[arch=amd64 signed-by=/etc/apt/keyrings/docker-archive-keyrings.gpg] https://download.docker.com/linux/debian 稳定