docker拉取镜像提示 remote trust data does not exist for xxxxxx

1、How can I be sure that I am pulling a trusted image from docker

2、docker: you are not authorized to perform this operation: server returned 401.



以上两个问题可以试试以下解决办法

DOCKER_CONTENT_TRUST=false

在这里插入图片描述

本人是使用jenkins部署自己的项目到docker容器出现的这个错误,

  • 解决办法
    注意在制作镜像之前设置不需要上传秘钥,如果你们在执行遇到这个问题,可以试着在拉取、推送该镜像之前进行操作
#不需要上传秘钥
DOCKER_CONTENT_TRUST=false
#制作dockerfile镜像
docker build -f Dockerfile  -t ruoyi-admin .
#run
docker run --name ruoyi-admin -d -p  80:80 --network=host ruoyi-admin

3、Error: remote trust data does not exist for docker.io/nacos/nacos-server: notary.docker.io does not have trust data for docker.io/nacos/nacos-server

4、Error: remote trust data does not exist for docker.io/seataio/seata-server: notary.docker.io does not have trust data for docker.io/seataio/seata-server

在这里插入图片描述
说明添加
DOCKER_CONTENT_TRUST=true/false docker pull xxx
本人解决的思路来此stackoverflow也可以参考

5、核心配置DOCKER_CONTENT_TRUST有关改配置的详细说明

docker官网说明

https://docs.docker.com/engine/security/trust/#signing-images-with-docker-content-trust
自动生成的密钥会保存在你的本地服务器上

在这里插入图片描述

6、Docker内容信任机制(docker trust)

在现代 IT 世界中,信任很重要,而且会变得越来越重要。幸运的是,Docker 通过一种称为 Docker 内容信任(Docker Content Trust, DCT)的功能来实现信任机制。

总体来说,Docker 镜像的发布者可以在将镜像推送到库中时对其进行签名。使用者可以在拉取镜像时进行校验,或进行构建或运行等操作。长话短说,DCT 确保使用者能够得到他们想要的镜像。
在这里插入图片描述
CT 实现的是客户端的签名和验证,意味着由 Docker 客户端执行它们。

显然,类似这样的密码机制,对于确保在互联网上拉取和推送的软件的可信性是非常重要的,其在整个技术栈的各个层次,以及软件交付流水线的各个环节都在发挥越来越重要的作用。在不久的将来,这种加密信任机制将有望在交付链的各个方面发挥作用。

下面通过一个简单的配置 DCT 的实战例子予以阐述。我们需要一个 Docker 客户端和一个用来推送镜像的库,Docker Hub 上的镜像库即可。

DCT 可以通过环境变量 DOCKER_CONTENT_TRUST 来启用或关闭。将该环境变量的值设置为“1”的话将会在当前会话开启 DCT;将其设置为其他值的话则会关闭 DCT。

下面的命令用于在 Linux 主机的 Docker 中开启 DCT。

 export DOCKER_CONTENT_TRUST

后续的 docker push 命令会在推送镜像时自动对镜像进行签名。因此,所有的 pull、 build 和 run 命令只会对已签名的镜像起作用。

下面将镜像打一个新的标签(Tag)并推送到镜像库。被推送的镜像可以是任意镜像。本例中使用的是刚刚拉取的 alpine:latest 镜像,因此并非是自己的签名。

⒈ 对镜像打标签,从而可以将其推送到目标镜像库。本例中,会将其推送到位于我 Docker Hub 个人账户命名空间下的镜像库。

 docker image tag alpine:latest nigelpoulton/dockerbook:v1

2、登录到 Docker Hub(或其他镜像库)以便推送镜像。

$ docker login
Login with your Docker ID to push and pull images from Docker Hub.
Username: nigelpoulton
Password:
Login Succeeded

3、推送打了新标签的镜像。

$ docker image push nigelpoulton/dockerbook:v1
The push refers to a repository [docker.io/nigelpoulton/dockerbook]
cd7100a72410: Mounted from library/alpine
v1: digest: sha256:8c03...acbc size: 528
Signing and pushing trust metadataEnter passphrase for new root key with ID 865e4ec:
Repeat passphrase for new root key with ID 865e4ec:
Enter passphrase for new repository key with ID bd0d97d:
Repeat passphrase for new repository key with ID bd0d97d:
Finished initializing "docker.io/nigelpoulton/sign"
Successfully signed "docker.io/nigelpoulton/sign":v1

在开启 DCT 的情况下,该镜像会在推送时自动被签名。在签名时会创建两个密钥。

▪ 根密钥(Root key)。

▪ 库密钥(Repository key)。

默认情况下,两个密钥被保存在家目录下的隐藏目录 .docker 下。在 Linux 系统中为 ~/.docker/trust。

根密钥是主密钥(一定程度上)。它用于创建和签名新的库密钥,因此应该被妥善保管。这意味着,用户需要使用强密码予以保护,并且在不使用它的时候对其离线保存。一旦掉以轻心,难免会有后悔之时。正常情况下,每个用户应该仅有一个密钥,甚至一个团队或组织仅有一个密钥。并且通常情况下仅用它来创建新的库密钥。

库密钥也被称为标签密钥,用于对需要推送到指定镜像库的打标签的镜像进行签名。因此,每个镜像库配备一个库密钥。如果密钥遗失,相对来说容易恢复,但是仍然应该使用强密码进行保护,并妥善保存。

每次推送镜像到一个新镜像库,都会创建一个新的镜像库标签密钥,这需要使用根密钥,因此需要输入根密钥的密码。后续再推送到这个镜像库时仅需要输入镜像库标签密钥的密码。

此外,还有一个名为时间戳密钥(TimeStamp key)的密钥。它被保存在远程镜像库中,用于一些更加高级的使用场景以确保时效性。

下面看一下如何在开启 DCT 的情况下拉取镜像。

在开启 DCT 的 Docker 主机上执行以下命令,来拉取一个未打标签的镜像。

有时候错误新消息是 No trust data for unsigned。可见,Docker 会因为镜像未签名而拒绝下载。同样的,如果尝试基于未签名的镜像来构建新镜像或运行容器,也会得到类似的错误。来试一下。

在拉取镜像时使用 --disable-content-trust 来覆盖 DCT 设置。

docker image pull --disable-content-trust nigelpoulton/dockerbook:unsigned

现在尝试基于未签名的镜像运行容器。

$ docker container run -d --rm nigelpoulton/dockerbook:unsigned
docker: No trust data for unsigned.

可见 Docker 内容信任机制会作用于 push、pull 和 run 操作,下面尝试执行 build 操作看该机制是否起作用。

Docker UCP 同样支持 DCT,从而可以在 UCP 范围内进行签名策略的设置。如果要对整个 UCP 启用 DCT,请展开 Admin 下拉菜单,然后单击 Admin Settings,选择 Docker Content Trust 选项,然后勾选 Run Only Signed Images(仅运行签名镜像)复选框。这会对整个集群落实签名策略,并且仅允许使用签名的镜像部署服务。

默认配置下,任何被 UCP 有效用户签名的镜像都是可以使用的。用户也可以选择性地配置某些团队具有为镜像签名的权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/608724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring MVC参数接收、参数传递

Springmvc中,接收页面提交的数据是通过方法形参来接收: 处理器适配器调用springmvc使用反射将前端提交的参数传递给controller方法的形参 springmvc接收的参数都是String类型,所以spirngmvc提供了很多converter(转换器&#xff0…

Contingency Planning学习记录

Contingency Planning over Probabilistic Hybrid Obstacle Predictions for Autonomous Road Vehicles Contingency Planning over Probabilistic Hybrid Obstacle Predictions for Autonomous Road Vehicles - 知乎 Contingency Planning over Probabilistic Hybrid Obstac…

QT第二天

使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为&…

赠送葡萄酒:为别人选择合适的葡萄酒

葡萄酒可以在许多不同的场合成为很好的礼物,因为它可以用来庆祝许多不同的事情。当被邀请去别人家时,你可以带酒去吃饭。葡萄酒可以用来纪念婚礼、出生、毕业和各种纪念日,来自云仓酒庄品牌雷盛红酒分享这是一个非常合适的专业礼物。但是你怎…

1878_emacs company backend的选择尝试

Grey 全部学习内容汇总: GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used. 1872_emacs company backend的选择尝试 从C语言开发的使用场景角度,通过测试尝试看看这个company的backend应该来如何配置。 主题由来介…

React Native 桥接原生实现 JS 调用原生方法

一、为什么需要桥接原生 为了满足在React 层无法实现的需求 复杂高性能的组件:复杂表格、视频播放原生层开发能力:传感器编程、widget平台属性:系统信息、设备信息对接第三方应用:相机、相册、地图 真实的开发过程中是不可能完…

Spring循环引用和三级缓存

前言 Spring 解决 Bean 之间的循环引用关系用到了三级缓存,那么问题来了。三级缓存是怎么用的?每一层的作用是什么?非得用三级吗?两级缓存行不行? 理解循环引用 所谓的“循环引用”是指 Bean 之间的依赖关系形成了一…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷④

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷4 目录 需要竞赛软件包环境以及备赛资源可私信博主!!! 2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷4 模块一 …

一键搭建elk

一键启动elk 1. 生成环境的脚本 setup.sh #!/usr/bin/bash# logstash enviroment mkdir -p logstash touch logstash/logstash.conf # shellcheck disableSC1078 echo input {tcp {mode > "server"host > "0.0.0.0"port > 4560codec > jso…

多PC文件夹同步方案

在多个工作终端独立具备svn版本库的情况下,可使用本工具进行一键同步。 相较于传统的SVN中心检出更新方案中移动存储设备硬件及文件目录系统多终端间易损坏,本方案更加稳定 资料同步结构: 使用步骤: 1.修改config.ini配置文件 2…

【C++】HP-Socket(二):框架介绍、功能说明

1、接口 1.1 接口模型 1.2 三类接口 HP-Socket 定义了三类接口 组件接口(如:ITcpServer / IUdpClient):声明组件操作方法,应用程序创建组件对象后通过该接口来使用组件组件实现类(如:CTcpSer…

Mac 安装Nginx教程

Nginx官网 Nginx官网英文 1.在终端输入brew search nginx 命令检查nginx是否安装了 2. 安装命令:brew install nginx 3. 查看Nginx信息命令brew info nginx 4. 启动 nginx方式:在终端里输入 nginx 5.查看 nginx 是否启动成功 在浏览器中访问http://l…

powerdesigner导出sql将name放到comment注释上

1. 批量设置 2. 脚本 Option Explicit ValidationMode True InteractiveMode im_Batch Dim mdl the current modelget the current active model Set mdl ActiveModel If (mdl Is Nothing) ThenMsgBox"There is no current Model " ElseIf Not mdl.IsKindOf(PdPD…

JSON数据处理

1.添加json依赖 springmvc 默认使用jackson作为json类库,不需要修改applicationContext-servlet.xml任何配置&#xff0c;只需引入以下类库springmvc就可以处理json数据&#xff1a; <!--spring-json依赖--> <dependency><groupId>com.fasterxml.jackson.c…

构建自己的私人GPT-支持中文

上一篇已经讲解了如何构建自己的私人GPT&#xff0c;这一篇主要讲如何让GPT支持中文。 privateGPT 本地部署目前只支持基于llama.cpp 的 gguf格式模型&#xff0c;GGUF 是 llama.cpp 团队于 2023 年 8 月 21 日推出的一种新格式。它是 GGML 的替代品&#xff0c;llama.cpp 不再…

【cmu15445c++入门】(2)c++中的std::move() 左值引用右值引用

左值右值 要理解move语义&#xff0c;必须理解左值和右值的概念。左值的简化定义是左值是对象&#xff0c;指向内存中某个位置。右值是左值之外的任何。 std::move() move语义&#xff0c;在C中是一个有用的方法&#xff0c;它允许在对象之间高效和优化地转移数据所有权。m…

SpringMVC SpringMVC概述

1.1.MVC介绍 MVC是一种设计模式&#xff0c;将软件按照模型、视图、控制器来划分&#xff1a; M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为数据承载Bean&#xff1a;专门存储业务数…

vue3 useAttrs的使用场景,提取共有props

1 场景 多个类似组件都需要传参data&#xff0c;用于请求接口或者处理数据&#xff0c;想让组件干净整洁&#xff0c;把参数data提出来 2 方法 选项式 可以使用mixin混入或者extends继承&#xff08;略&#xff09; 组合式 可以使用hook 无脑式踩坑&#xff08;如下代码…

LabVIEW在设备状态监测与故障诊断中的应用

在现代工业自动化领域&#xff0c;LabVIEW的系统设计平台在设备状态监测与故障诊断中扮演着举足轻重的角色。通过提供一个可视化和数据流编程语言&#xff0c;LabVIEW大大提升了设备安全监测的效率&#xff0c;减少了系统维护成本&#xff0c;同时增强了设备的可靠性和可维护性…

Verilog 高级教程笔记——持续更新中

Verilog advanced tutorial 转换函数 调用系统任务任务描述int_val $rtoi( real_val ) ;实数 real_val 转换为整数 int_val 例如 3.14 -> 3real_val $itor( int_val ) ;整数 int_vla 转换为实数 real_val 例如 3 -> 3.0vec_val $realtobits( real_val ) ;实数转换为…