Docker:安装docker时如何解决ubuntu中的公钥错误

Cha*_*dra 15 ubuntu docker

运行以下命令以在 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#
Run Code Online (Sandbox Code Playgroud)

我也运行了下面的命令,但没有运气

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
Run Code Online (Sandbox Code Playgroud)

shi*_*ovk 60

首先,添加 Docker\xe2\x80\x99s 官方 GPG 密钥:

\n
sudo mkdir -p /etc/apt/keyrings\nsudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg\n
Run Code Online (Sandbox Code Playgroud)\n

或在其他情况下 (macOS)

\n
sudo mkdir -p /usr/share/keyrings\nsudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor --yes -o /usr/share/keyrings/docker-archive-keyring.gpg\n
Run Code Online (Sandbox Code Playgroud)\n

PS 对于某些人来说,这部分gpgp --dearmor很有用。

\n

其次,更新它的权限:

\n
sudo chmod a+r /etc/apt/keyrings/docker.gpg\n
Run Code Online (Sandbox Code Playgroud)\n

或在其他情况下 (macOS)

\n
sudo chmod a+r /usr/share/keyrings/docker-archive-keyring.gpg\n
Run Code Online (Sandbox Code Playgroud)\n

Install Docker Engine on Ubuntu - Official Docker Documentation

\n

  • “gpgp --dearmor”部分对我来说至关重要。这应该是标记的答案,谢谢 (2认同)

tuo*_*alo 19

运行此命令以添加正确的密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Run Code Online (Sandbox Code Playgroud)

来源:https : //docs.docker.com/install/linux/docker-ce/ubuntu/

  • 不适合我。 (6认同)
  • 截至目前,docker 指令无法识别其较新指令仅适用于 Ubuntu 20.04(?) 及更高版本。他们现在说要通过管道传输到 gpg --dearmor 命令,该命令在 Ubuntu 18.04 和许多早期版本下不起作用。相反,需要使用 apt-key add。 (3认同)

Mat*_*ath 17

来自: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
Run Code Online (Sandbox Code Playgroud)

  • 在 Ubuntu 20.04.4 LTS 上对我有用的答案: `echo \ "deb [arch=amd64signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com /linux/ubuntu \ $(lsb_release -cs) 稳定" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null`。该行已在 docker 网站上更新,但由于未知原因,它不适用于我的操作系统版本(20.04)。 (2认同)

小智 9

Debian 测试(靶心)存在问题:

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
Run Code Online (Sandbox Code Playgroud)

但可以通过以下方式解决:

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Run Code Online (Sandbox Code Playgroud)


sch*_*acs 9

确保 /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
Run Code Online (Sandbox Code Playgroud)


Obe*_*ako 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>
Run Code Online (Sandbox Code Playgroud)

确保替换<the key>为您复制的密钥
,然后再次运行命令


rob*_*obm 8

对于 22.04 我必须做:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg
Run Code Online (Sandbox Code Playgroud)

具体来说,将输出转到 /etc/apt/trusted.gpg.d/docker.gpg

  • 谢谢,这对我也有用(22.04)。还必须将下一个命令更新为: `$ echo \ "deb [arch=$(dpkg --print-architecture)signed-by=/etc/apt/trusted.gpg.d/docker.gpg] https:// /download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null` (2认同)

qar*_*arl 6

我有这个确切的问题。我相信这是由我的默认 umask 引起的,这导致某些 Docker 文件以不正确的权限安装。我能够通过更正 docker 密钥文件的文件权限来修复它:

sudo chmod a+r /usr/share/keyrings/docker-archive-keyring.gpg
Run Code Online (Sandbox Code Playgroud)

  • 你救了我的命,我用 `strace -f apt update 2&gt;&amp;1|grep key|grep docker-archive-keyring` 确认了这一点,请参阅下面的回复。 (4认同)
  • 我觉得如果某些键不可读,apt-get 应该发出警告消息。 (3认同)
  • 这个答案也拯救了我的一天!非常感谢,使用“sudo apt-get update”现在又可以使用了。 (2认同)
  • 这个答案在其他答案不起作用的地方起作用。 (2认同)