首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >apt-get更新Ubuntu 22基座码头映像失败

apt-get更新Ubuntu 22基座码头映像失败
EN

Stack Overflow用户
提问于 2022-06-15 00:19:38
回答 4查看 7.2K关注 0票数 14

我正在尝试升级我们的对接基地图像到最新的稳定版本的Ubuntu。我把这个问题孤立成了一个简单的可重复的案例。我有这样一个Dockerfile:

代码语言:javascript
运行
复制
FROM ubuntu:22.04

MAINTAINER mep-dev@zulily.com

# Install java and clean-up
RUN apt-get update

当我在我的本地机器上构建它时,我没有任何问题。但是,当我在CICD上构建它时,有时会遇到以下错误:

步骤3/3 :运行apt-get更新

->在6ca01b60de64中运行

Get:1 http://archive.ubuntu.com/ubuntu干扰InRelease 270 kB

Get:2 http://security.ubuntu.com/ubuntu干扰- InRelease 110 kB

Get:3 http://archive.ubuntu.com/ubuntu干扰-更新InRelease 109 kB

Get:4 http://archive.ubuntu.com/ubuntu干扰-backports 99.8 kB

错误:1 http://archive.ubuntu.com/ubuntu干扰InRelease

由于公钥不可用,无法验证下列签名: NO_PUBKEY 871920D1991BC93C

错误:3 http://archive.ubuntu.com/ubuntu干扰-更新InRelease

由于公钥不可用,无法验证下列签名: NO_PUBKEY 871920D1991BC93C

错误:4 http://archive.ubuntu.com/ubuntu干扰-backports

由于公钥不可用,无法验证下列签名: NO_PUBKEY 871920D1991BC93C

错误:2 http://security.ubuntu.com/ubuntu干扰-安全InRelease

由于公钥不可用,无法验证下列签名: NO_PUBKEY 871920D1991BC93C

正在读取包列表...

W:http://archive.ubuntu.com/ubuntu/dists/jammy/InRelease:键环http://archive.ubuntu.com/ubuntu/dists/jammy/InRelease中的键被忽略,因为执行apt键的用户'_apt‘无法读取该文件。

W:http://archive.ubuntu.com/ubuntu/dists/jammy/InRelease:键环http://archive.ubuntu.com/ubuntu/dists/jammy/InRelease中的键被忽略,因为执行apt键的用户'_apt‘无法读取该文件。

W: GPG错误:http://archive.ubuntu.com/ubuntu干扰InRelease:由于公钥不可用,无法验证下列签名: NO_PUBKEY 871920D1991BC93C

E:存储库'http://archive.ubuntu.com/ubuntu jammy InRelease‘没有签名。

W:http://archive.ubuntu.com/ubuntu/dists/jammy-updates/InRelease:键环http://archive.ubuntu.com/ubuntu/dists/jammy-updates/InRelease中的键被忽略,因为执行apt键的用户'_apt‘无法读取该文件。

W:http://archive.ubuntu.com/ubuntu/dists/jammy-updates/InRelease:键环http://archive.ubuntu.com/ubuntu/dists/jammy-updates/InRelease中的键被忽略,因为执行apt键的用户'_apt‘无法读取该文件。

W: GPG错误:http://archive.ubuntu.com/ubuntu干扰-更新InRelease:由于公钥不可用,无法验证下列签名: NO_PUBKEY 871920D1991BC93C

E:存储库'http://archive.ubuntu.com/ubuntu干扰-更新InRelease‘没有签名。

W:http://archive.ubuntu.com/ubuntu/dists/jammy-backports/InRelease:键环http://archive.ubuntu.com/ubuntu/dists/jammy-backports/InRelease中的键被忽略,因为执行apt键的用户'_apt‘无法读取该文件。

W:http://archive.ubuntu.com/ubuntu/dists/jammy-backports/InRelease:键环http://archive.ubuntu.com/ubuntu/dists/jammy-backports/InRelease中的键被忽略,因为执行apt键的用户'_apt‘无法读取该文件。

W: GPG错误:http://archive.ubuntu.com/ubuntu干扰-backports:由于公钥不可用,无法验证下列签名: NO_PUBKEY 871920D1991BC93C

E:存储库'http://archive.ubuntu.com/ubuntu jammy-backports InRelease‘没有签名。

W:http://security.ubuntu.com/ubuntu/dists/jammy-security/InRelease:键环http://security.ubuntu.com/ubuntu/dists/jammy-security/InRelease中的键被忽略,因为执行apt键的用户'_apt‘无法读取该文件。

W:http://security.ubuntu.com/ubuntu/dists/jammy-security/InRelease:键环http://security.ubuntu.com/ubuntu/dists/jammy-security/InRelease中的键被忽略,因为执行apt键的用户'_apt‘无法读取该文件。

W: GPG错误:http://security.ubuntu.com/ubuntu干扰-安全InRelease:由于公钥不可用,无法验证下列签名: NO_PUBKEY 871920D1991BC93C

E:存储库'http://security.ubuntu.com/ubuntu干扰-安全InRelease‘没有签名。

E:执行脚本问题apt::Update::Post调用'rm -f /var/cache/apt/ Problem /..deb/var/cache/apt/档案/分部/..deb/var/cache/apt/*..bin比对真‘

E:子进程返回一个错误代码。

命令'/bin/sh apt -c‘返回一个非零代码: 100

如果我注释掉了RUN apt-get update,那么它就成功了,我可以输入容器并看到/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg/etc/apt/trusted.gpg.d/ubuntu-keyring-2018-archive.gpg确实存在,并且已经读取了所有权限:

root@b778220b39d8:/# ls -l /etc/apt/受托人

共计8

-rw-r--r-1根根2794 3月26 2021 ubuntu-keyring-2012-cdimage.gpg

-rw-r--r-1根根1733 2021 ubuntu-keyring-2018-存档. Mar

我还检查了父目录,它们至少对所有人都有r-x。

This answer可能是相关的,但是为什么在一个环境而不是另一个环境中使用基本图像时,文件具有正确的结构?

更新:

通过使用--pull,我可以看到它使用的确切图像。

$ docker build --拉-t $EMAIL_DELIVERABILITY_ARN。

步骤1/3 :来自ubuntu:22.04

22.04:从图书馆调出/ubuntu

摘要: sha256:b6b83d3c331794420340093eb706a6f152d9c1fa51b262d9bf34594887c2c7ac

状态:下载ubuntu的更新映像:22.04

- 27941809078c

这是我在本地建筑时看到的相同的sha和图像id,它可以工作。

我和ubuntu有同样的问题:20.04。

EN

回答 4

Stack Overflow用户

发布于 2022-09-13 10:02:12

在花了半天时间修复Ubuntu映像(没有损坏)之后,我终于开始调试主机了。

这是一个docker问题。Ubuntu利用syscalls实现更好的密钥安全性,Docker还不支持这种安全性。解决办法是更新码头..。或者使用runc或者类似的东西。

apt没有得到不支持syscalls的消息,而是得到了拒绝权限的消息,这导致了令人困惑的错误消息。

从技术上讲,您可以对ubuntu进行补丁,以降低安全性,并与老的对接者一起工作,但遗憾的是,这不是一个长期的解决方案。

票数 5
EN

Stack Overflow用户

发布于 2022-06-22 07:49:06

完全相同的问题

错误:3 http://security.ubuntu.com/ubuntu干扰-安全InRelease由于公钥不可用而无法验证下列签名: NO_PUBKEY 871920D1991BC93C读取包列表.[91 is : /etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg :键环http://archive.ubuntu.com/ubuntu/dists/jammy/InRelease中的键被忽略,因为执行apt键的用户'_apt‘无法读取该文件。

码头文件(简单如何复制)-版本: 18.x或19.03/

代码语言:javascript
运行
复制
FROM ubuntu:latest
RUN apt-get -y update 

使用最新的Docker版本20.10.9,我没有看到这个问题。

其中一些选项试图拍摄:

/etc/apt/sources.list

  • RUN
  1. ‘s/jammy/ gnupg key adv --keyserver keyserver.ubuntu.com -recv-key 871920D1991BC93C --这与另一个子问题失败--似乎没有安装gnupg、gnupg2和gnupg1,但是这个操作

需要其中一个。

因此,解决方案似乎要么更新停靠版本,要么使用标记的图像,它以前的工作。

票数 2
EN

Stack Overflow用户

发布于 2022-06-15 16:54:25

当您按名称引用一个码头映像时,docker只检查它是否在本地存在--它不检查更新。因此,如果已经有一个版本的命名图像可用,它将使用,即使它可能是过时的。我怀疑这就是您所看到的:您的一些CI节点必须有一个缓存版本的映像,有问题。

有几种处理这一问题的方法:

  1. 在调用docker run之前显式地删除了该图像的docker pull ubuntu:22.04;这将拉下一个更新版本的图像(如果存在的话)。

  1. --pull always添加到docker run命令行。这可以完成相同的任务,但不需要执行额外的命令。

  1. 通过摘要而不是标记引用图像。如果您使用这样的图像引用:

来自ubuntu@sha256:bace9fb0d5923a675c894d5c815da75ffe35e24970166a48a4460a48ae6e0d19

那么码头将使用准确的图像。您可以在码头集线器上找到图像摘要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72624687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档