首页 > 其他分享 >为什么swarm节点中运行容器的镜像,无法查看到的tag信息?

为什么swarm节点中运行容器的镜像,无法查看到的tag信息?

时间:2022-09-19 14:35:02浏览次数:112  
标签:node nginx swarm tag 镜像 docker 172.20


最近今天,在研究docker swarm中服务的部署,发现一个非常奇怪的现象······

 

通过docker service create命令创建service,比如:

 

docker service create \
  --with-registry-auth \
  --name=nginx \
  --replicas=3 \
  --publish published=8080,target=80 \
  172.20.58.152/middleware/nginx:1.21.4  

 

 

正常的逻辑,是不是每个节点上,都要拉取这个镜像,然后运行呢?

 

没错,在k8s里面也是这样的,不过,在swarm中不是这样的

 

登录其中一个task所在的主机

 

[root@nccztsjb-node-05 ~]# docker images
REPOSITORY                       TAG       IMAGE ID       CREATED         SIZE
172.20.58.152/middleware/nginx   <none>    9a8e1ec1235e   9 months ago    309MB
172.20.58.152/middleware/nginx   <none>    ea335eea17ab   10 months ago   141MB
[root@nccztsjb-node-05 ~]# 

 

 

奇怪不?明明在创建的service的时候,指定了镜像的tag:

 

172.20.58.152/middleware/nginx:1.21.4

 

可是work节点拉取之后,咋就没了呢?

 

百思不得其解之时,看到了官方的一个解释:

 

If you specify a tag, the manager (or the Docker client, if you use content trust) resolves that tag to a digest. When the request to create a container task is received on a worker node, the worker node only sees the digest, not the tag.

 

也就是说,如果指定了镜像的tag,manager节点会将tag解析成镜像的摘要。然后,worker节点接收到运行task的命令时,它只能看到镜像摘要,而不是tag.

 

所以,理解了吗

 

这个也是swarm集群中镜像的一个特点。

 

那要怎么看看镜像的摘要?

 

docker inspect <IMAGE_ID>就能查看镜像的ID了。

[root@nccztsjb-node-05 ~]# docker images
REPOSITORY                       TAG       IMAGE ID       CREATED         SIZE
172.20.58.152/middleware/nginx   <none>    9a8e1ec1235e   9 months ago    309MB
172.20.58.152/middleware/nginx   <none>    ea335eea17ab   10 months ago   141MB
[root@nccztsjb-node-05 ~]# docker inspect 9a8e1ec1235e -f $"{{.RepoDigests}}"
[172.20.58.152/middleware/nginx@sha256:7d0dd4475eacf253250a9712fa1333b93755611c05f3b7dcf9a48d03a699d867]
[root@nccztsjb-node-05 ~]# 
[root@nccztsjb-node-05 ~]# docker inspect ea335eea17ab -f $"{{.RepoDigests}}"
[172.20.58.152/middleware/nginx@sha256:2f14a471f2c2819a3faf88b72f56a0372ff5af4cb42ec45aab00c03ca5c9989f]
[root@nccztsjb-node-05 ~]# 

 

 

OK,那以后在swarm集群中部署service,再看到没有tag的镜像信息,就不要大惊小怪了哟!

 

标签:node,nginx,swarm,tag,镜像,docker,172.20
From: https://www.cnblogs.com/chuanzhang053/p/16707579.html

相关文章

  • docker 镜像发布到 docker hub
    1\将容器打包成镜像dockercommit-a"提交者姓名"-m"镜像信息"要打包的容器名称或id 生成的镜像名称:标签dockercommit-a"XXX"-m"XXX1.2"ccad57c365......
  • Typescript类型体操 - PercentageParser
    题目中文实现类型PercentageParser。根据规则/^(\+|\-)?(\d*)?(\%)?$/匹配类型T。匹配的结果由三部分组成,分别是:[正负号,数字,单位],如果没有匹配,则默认是空字符串......
  • CentOS 7国内镜像yum安装mysql5.7
    一、检查MySQL环境是否已存在rpm-qa| grep mysqlrpm-qa|grepmariadb>>我这里要卸载mariadb(假如你发现类似的就和我一样删除就好了):yum removemariadb-libs-5.......
  • docker实战教程(七):镜像的分层概念
    联合文件系统(UnionFS)联合文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系......
  • CentOS 配置 阿里镜像源
    若未安装wget,安装wgetyuminstall-ywget获取阿里云镜像repowget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repo更新......
  • Jenkins集成Harbor镜像仓库
    一、集成的必要性在之前的项目部署中,使用jenkins将构建好的代码通过publishoverssh插件推送到远程服务器进行部署,然后在远程服务器上进行镜像的构建以及容器的启......
  • C# WinForm DataGridView根据某一列值改变行颜色
    DataGridView根据某一列值改变行颜色,需要同时用到事件:CurrentCellDirtyStateChanged和CellValueChangedprivatevoiddgv1_CellValueChanged(objectsender,D......
  • C# DataGridView防止闪烁的方法
    启用dataGridView的双缓冲即可解决,方法如下:Typetype=dataGridView.GetType();PropertyInfopi=type.GetProperty("DoubleBuffered",......
  • 删除本地镜像
    1.查看镜像 2.删除nginx镜像,显示'imageisreferencedinmultiplerepositories' 再看1中IMAGEID为7042885a156a的nginx指向两个repository,所以删除失败了3.这......
  • docker删除镜像报image is referenced in multiple repositories
    删除镜像发现报错,报错如下:[root@test22:58:58~/docker]#dockerrmidd34e67e3371Errorresponsefromdaemon:conflict:unabletodeletedd34e67e3371(mustbe......