在 Docker 构建期间第二次 apt-get 更新后,Ubuntu 21.04 中的 GPG 错误

问题描述

构建以下 Docker 文件时出错

FROM ubuntu:21.04

RUN apt-get update && \
    apt-get install --no-install-recommends -y curl=7.\* && \
    apt-get install --no-install-recommends -y unzip=6.\* &&\ 
    rm -rf /var/lib/apt/lists/*

RUN apt-get update && \
    mkdir -p /usr/share/man/man1 && \
    apt-get install --no-install-recommends -y maven=3.6.3-5 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

第二个 apt-get update 运行时发生错误

错误如下:-

E: The repository 'http://security.ubuntu.com/ubuntu hirsute-security InRelease' is not signed.
W: GPG error: http://archive.ubuntu.com/ubuntu hirsute InRelease: gpgv,gpgv2 or gpgv1 required for verification,but neither seems installed
E: The repository 'http://archive.ubuntu.com/ubuntu hirsute InRelease' is not signed.
W: GPG error: http://archive.ubuntu.com/ubuntu hirsute-updates InRelease: gpgv,but neither seems installed
E: The repository 'http://archive.ubuntu.com/ubuntu hirsute-updates InRelease' is not signed.
W: GPG error: http://archive.ubuntu.com/ubuntu hirsute-backports InRelease: gpgv,but neither seems installed
E: The repository 'http://archive.ubuntu.com/ubuntu hirsute-backports InRelease' is not signed.

任何形式的帮助将不胜感激。

解决方法

这是 docker / seccomp / glibc 交互中的一个错误:https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1916485

,

我已经运行了你的 docker 文件并得到了同样的错误。尝试各种方法来禁用验证也没有产生好的结果。也没有删除版本限制,只是安装最新版本的工具。我能找到的唯一解决方案是将 ubuntu 降级到 20.04,但该版本的操作系统没有 3.6.3-5 版本的 maven,只有 3.6.3-1 (afaik)。

我能得到的最接近的图像与您想要的图像完全不同:

FROM ubuntu:20.04

RUN apt update && \
    apt install --no-install-recommends -y curl=7.\* unzip=6.\* maven=3.6.3-1 && \
    apt clean && \
    rm -rf /var/lib/apt/lists/* && \
    mkdir -p /usr/share/man/man1

另请注意我如何使用 apt 而不是 apt-get 并且我只执行一次运行(通过只有一个层来制作更简单的图像)并且只执行一个 apt update 和将我想要安装的东西链接到一个 apt install 而不是单独的。这只是更快更容易。

但是,如果您想要一个 Maven 构建框,也许您最好使用来自 docker hub 的预构建 Maven 镜像之一,这些镜像本身基于 openjdk 镜像。对于 java,底层的 linux 发行版很少重要,而 openjdk 映像非常受尊重:

from maven:3.6.3-jdk-11
run apt update && apt install -y curl unzip && apt clean

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...