我正在尝试将我们的一个docker基础镜像升级到最新稳定版本的Ubuntu。我已经将问题隔离到了一个简单的可重现案例中。我有一个类似于以下的Dockerfile:
FROM ubuntu:22.04
MAINTAINER mep-dev@zulily.com
# Install java and clean-up
RUN apt-get update
当我在本地构建时,没有任何问题。然而,当我在我的CICD上构建时,有时会出现这个错误:
第3步/3:运行apt-get update
如果我注释掉
---> 正在运行6ca01b60de64中
获取:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
获取:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
获取:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [109 kB]
获取:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
错误:1 http://archive.ubuntu.com/ubuntu jammy InRelease
由于公钥不可用,以下签名无法验证:NO_PUBKEY 871920D1991BC93C
错误:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
由于公钥不可用,以下签名无法验证:NO_PUBKEY 871920D1991BC93C
错误:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease
由于公钥不可用,以下签名无法验证:NO_PUBKEY 871920D1991BC93C
错误:2 http://security.ubuntu.com/ubuntu jammy-security InRelease
由于公钥不可用,以下签名无法验证:NO_PUBKEY 871920D1991BC93C
正在读取软件包列表...
W:http://archive.ubuntu.com/ubuntu/dists/jammy/InRelease:由于文件对用户“_apt”执行apt-key不可读,因此忽略密钥环中的密钥/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg。
W:http://archive.ubuntu.com/ubuntu/dists/jammy/InRelease:由于文件对用户“_apt”执行apt-key不可读,因此忽略密钥环中的密钥/etc/apt/trusted.gpg.d/ubuntu-keyring-2018-archive.gpg。
W:GPG错误:http://archive.ubuntu.com/ubuntu jammy InRelease:由于公钥不可用,以下签名无法验证:NO_PUBKEY 871920D1991BC93C
E:存储库'http://archive.ubuntu.com/ubuntu jammy InRelease'未经过签名。
W:http://archive.ubuntu.com/ubuntu/dists/jammy-updates/InRelease:由于文件对用户“_apt”执行apt-key不可读,因此忽略密钥环中的密钥/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg。
W:http://archive.ubuntu.com/ubuntu/dists/jammy-updates/InRelease:由于文件对用户“_apt”执行apt-key不可读,因此忽略密钥环中的密钥/etc/apt/trusted.gpg.d/ubuntu-keyring-2018-archive.gpg。
W:GPG错误:http://archive.ubuntu.com/ubuntu jammy-updates InRelease:由于公钥不可用,以下签名无法验证:NO_PUBKEY 871920D1991BC93C
E:存储库'http://archive.ubuntu.com/ubuntu jammy-updates InRelease'未经过签名。
W:http://archive.ubuntu.com/ubuntu/dists/jammy-backports/InRelease:由于文件对用户“_apt”执行apt-key不可读,因此忽略密钥环中的密钥/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg。
W:http://archive.ubuntu.com/ubuntu/dists/jammy-backports/InRelease:由于文件对用户“_apt”执行apt-key不可读,因此忽略密钥环中的密钥/etc/apt/trusted.gpg.d/ubuntu-keyring-2018-archive.gpg。
W:GPG错误:http://archive.ubuntu.com/ubuntu jammy-backports InRelease:由于公钥不可用RUN apt-get update
,然后成功了,我可以进入容器并查看/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg
和/etc/apt/trusted.gpg.d/ubuntu-keyring-2018-archive.gpg
确实存在且对所有权限都有读取权限:我还检查了父目录,它们至少具有所有的r-x权限。 这个答案可能相关,但是为什么当基础图像在一个环境中使用时,文件具有正确的结构而在另一个环境中却没有呢?root@b778220b39d8:/# ls -l /etc/apt/trusted.gpg.d
total 8
-rw-r--r-- 1 root root 2794 Mar 26 2021 ubuntu-keyring-2012-cdimage.gpg
-rw-r--r-- 1 root root 1733 Mar 26 2021 ubuntu-keyring-2018-archive.gpg
更新:
通过使用--pull
,我可以看到它正在使用的确切镜像。这是与本地构建时看到的相同的sha和镜像ID,可以正常工作。$ docker build --pull -t $EMAIL_DELIVERABILITY_ARN .
Step 1/3 : FROM ubuntu:22.04
22.04: 从library/ubuntu中拉取
Digest: sha256:b6b83d3c331794420340093eb706a6f152d9c1fa51b262d9bf34594887c2c7ac
Status: 已下载新的镜像ubuntu:22.04
---> 27941809078c
我在ubuntu:20.04上没有遇到同样的问题。
docker pull ubuntu:22.04
吗? - larsksW: http://security.ubuntu.com/ubuntu/dists/jammy-security/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.
尝试使用--security-opt seccomp:unconfined
,这可能会产生安全风险,但可以解决此问题。$ docker run --security-opt seccomp:unconfined -it ubuntu:22.04
参考链接: https://bugs.launchpad.net/cloud-images/+bug/1889311 https://github.com/tianon/docker-brew-ubuntu-core/issues/183 - Craig Comstock