一、基本信息

1、Docker版本
[root@ip---- ~]# docker --version
Docker version 19.03., build a872fc2f86
 
2、系统版本
[root@ip---- ~]# cat /etc/redhat-release
CentOS Linux release 7.6. (Core)
 

二、问题描述

Dockerfile1:
FROM centos
RUN rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum -y install nginx
CMD /bin/bash -c "echo 'hello' && exec nginx -g 'daemon off;'"
Dockerfile2:
FROM centos
RUN rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum -y install nginx
COPY ./lile_test /
CMD /bin/bash -c "echo 'hello' && exec nginx -g 'daemon off;'"
 
1)在机器1上通过Dockerfile1制作镜像lile224/centos7_nginx,并上传到Docker Hub

docker build -f Dockerfile1  -t lile224/centos7_nginx: .
docker push lile224/centos7_nginx:
 
2)在机器2上通过docker service启动容器
docker service create --name centos7_nginx lile224/centos7_nginx:
 
3)在机器上通过Dockerfile2制作镜像lile224/centos7_nginx,并重新push到Docker Hub
docker build -f Dockerfile2  -t lile224/centos7_nginx: .
docker push lile224/centos7_nginx:
 
4)对比Dockerfile1与Dockerfile2,我把一个叫lile_test的文件拷贝到了根目录下,所以这个镜像是更新了,我得更新我的service
docker service update centos7_nginx --image lile224/centos7_nginx:
 
到这里为止,发现这个update有把最新提交的镜像pull下来,但是容器运行的镜像还是原来的那个。
 

三、排查过程

经过反反复复的测试验证,第一是不是版本的问题,发现不是。这是在线上发现的问题,我自己模拟这个环境重现错误,发现自己的环境又可以,这就尴尬了,然后对比线上环境和自己模拟的环境没啥不一样啊;后来在网上搜索的时候,关于这个的问题还很少有资料,在某个地方看到说当你的仓库是私有仓库的时候,要加上参数--with-registry-auth。然后反向验证了一下,把自己的仓库从public设置为private的时候,这个问题得到了重现。也就得到了解决办法。
 

四、解决办法

1)把仓库设为公有仓库
2)在service update的时候加上参数--with-registry-auth
 

五、深究原因

待研究,以后弄明白了再来补充
 

六、总结

1)一直把问题放在Docker上,没去想其他方面,比如仓库的问题
 
2)不要放过任何一个错误,其实service update的时候一直有报错,如下:
[root@ip---- ~]# docker service update centos7_nginx --image lile224/centos7_nginx:
image lile224/centos7_nginx: could not be accessed on a registry to record
its digest. Each node will access lile224/centos7_nginx: independently,
possibly leading to different nodes running different
versions of the image. centos7_nginx
overall progress: out of tasks
/: running [==================================================>]
verify: Service converged
一直没去管它,没去仔细的看他,然后就是按照自己的想象在找原因;不要放过任何一个错误,多看;然后其实可以使用systemctl status docker看看docker的状态时不时有error,一看果然是有的,然后得根据日志去查问题。
 
3)路还很长,得加油

Docker service update更新不成功的问题的更多相关文章

  1. 37. docker swarm docker service 的更新

    在service 运行的情况下 进行更新 1. 创建 名为 demo 的 overlay 网络 docker network create -d overlay demo 2. 创建 python-f ...

  2. docker swarm:执行 service update 过程中服务短暂不能访问的问题

    这是我们使用自建 docker swarm 集群后在部署时遇到的一个问题,使用 docker service update 命令更新服务时, docker service update -d=fals ...

  3. Docker - 通过swarm 管理 docker service

    创建一个 Docker service $ docker service create --replicas 1 --name myhelloworld alpine ping docker.com ...

  4. docker探索-使用docker service管理swarm(十一 )

    本文转自:https://www.cnblogs.com/atuotuo/p/6265541.html 1.创建一个 Docker service $ docker service create -- ...

  5. docker.service启动失败:Unit not found

    docker.service启动失败:Unit not found 版权声明:本文为博主原创文章,未经博主允许不得转载. 背景 因为最近一直在折腾Kubernetes集群版本升级.Docker版本升级 ...

  6. SVN提示update更新成功,但是本地文件却没有更新

    问题描述:将仓库的最新版本代码check out到本地后,然后最某个文件做了修改,保存后想通过svn的update来重新得到最新的版本,发现失效. 原因:经过多方查找原因,主要看了以下两篇文档 htt ...

  7. Job for docker.service failed because the control process exited with error code. See

    在Liunx中使用Docker, 注: Liunx使用的是在虚拟机下的centOS7版本在刚开始安装Docker时没有任何错误, 但是在后续的docker启动过程中, 出现以下问题: Job for ...

  8. Linux系统Docker启动问题Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service"

    在Liunx中使用Docker, 注: Liunx使用的是在虚拟机下的centOS7版本在刚开始安装Docker时没有任何错误, 但是在后续的docker启动过程中, 出现以下问题: [root@zk ...

  9. CentOS启动docker1.13失败(Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.)

    一.启动失败 1.启动docker [root@localhost ~]# systemctl start docker Job for docker.service failed because t ...

随机推荐

  1. axios跨域访问eggjs的坑egg-cors egg-passport passport-local session传递问题

    在同一机器上写前端和后端,前端使用webpack-dev-server启动,后端直接在eggjs项目目录下使用npm run dev启动,这种情况下,前端访问后端就是跨域访问.eggjs提供了一个跨域 ...

  2. 个推TechDay参会感悟

    上周六去参加了个推和FCC联合在梦想小镇举办的TechDay,当然是作为台下听讲选手参与的,想上去讲可惜实力他不允许啊,吹牛逼我在行,讲技术可就有点虚了,老老实实的坐在台下听大佬们的分享,当然由于买了 ...

  3. AOE工程实践-银行卡OCR里的图像处理

    作者:杨科 近期我们开发了一个银行卡 OCR 项目.需求是用手机对着银行卡拍摄以后,通过推理,可以识别出卡片上的卡号. 工程开发过程中,我们发现手机拍摄以后的图像,并不能满足模型的输入要求.以 And ...

  4. 【Spring】编程式事务和声明式事务

    一.概述 二.准备工作 1. 创建表 2. 创建项目并引入Maven依赖 3. 编写实体类 4. 编写Dao层 5. 业务层 6. XML中的配置 7. 测试 三.编程式事务 1. 在业务层代码上使用 ...

  5. VUE中CSS样式穿透

    VUE中CSS样式穿透 1. 问题由来 在做两款H5的APP项目,前期采用微信官方推荐的weui组件库.后来因呈现的效果不理想,组件不丰富,最终项目完成后全部升级采用了有赞开发的vant组件库.同时将 ...

  6. 第一次作业:学习C++指针

    1 内存空间的访问方式 计算机的内存存储器被划分为一个个存储单元.储存单元按一定的规则编号,这个编号就是存储单元的地址.地址编码的基本单位是字节,每个字节由8个二进制位组成,也就是说每个字节是一个基本 ...

  7. 什么是Json,Json如何使用

    JavaScript Object Notation:javascript的对象表示法. 这是一种能传递对象的语法,可以是键值对,数组,以及其他对象. 轻量级的数据传输方法. json格式: { ke ...

  8. 行内元素有哪些?块级元素有哪些?空(void)元素有哪些?

    CSS规范规定,每个元素都有display属性,确定该元素的类型.每个元素都有默认的display值,如div的display默认值为“block”,则为“块级”元素:span默认display属性值 ...

  9. 【第十七篇】easyui-datagrid 导出Excel (在客户端能弹出下载框)

    //导出Excel function exportExcel(obj) { var SaleOrderNo = $("#SaleOrderNo").val().trim(); va ...

  10. Java位运算实现加减乘除四则运算

    本文是继<一文了解有趣的位运算>的第二篇文章. 我们知道,计算机最基本的操作单元是字节(byte),一个字节由8个位(bit)组成,一个位只能存储一个0或1,其实也就是高低电平.无论多么复 ...