zoukankan      html  css  js  c++  java
  • Docker service update更新不成功的问题

    一、基本信息

    1、Docker版本
    [root@ip-172-0-0-88 ~]# docker --version
    Docker version 19.03.3, build a872fc2f86
     
    2、系统版本
    [root@ip-172-0-0-88 ~]# cat /etc/redhat-release 
    CentOS Linux release 7.6.1810 (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:20191012 .
    docker push lile224/centos7_nginx:20191012
     
    2)在机器2上通过docker service启动容器
    docker service create --name centos7_nginx lile224/centos7_nginx:20191012
     
    3)在机器上通过Dockerfile2制作镜像lile224/centos7_nginx,并重新push到Docker Hub
    docker build -f Dockerfile2  -t lile224/centos7_nginx:20191012 .
    docker push lile224/centos7_nginx:20191012
     
    4)对比Dockerfile1与Dockerfile2,我把一个叫lile_test的文件拷贝到了根目录下,所以这个镜像是更新了,我得更新我的service
    docker service update centos7_nginx --image lile224/centos7_nginx:20191012
     
    到这里为止,发现这个update有把最新提交的镜像pull下来,但是容器运行的镜像还是原来的那个。
     

    三、排查过程

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

    四、解决办法

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

    五、深究原因

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

    六、总结

    1)一直把问题放在Docker上,没去想其他方面,比如仓库的问题
     
    2)不要放过任何一个错误,其实service update的时候一直有报错,如下:
    [root@ip-172-0-0-111 ~]# docker service update centos7_nginx --image lile224/centos7_nginx:20191012
    image lile224/centos7_nginx:20191012 could not be accessed on a registry to record
    its digest. Each node will access lile224/centos7_nginx:20191012 independently,
    possibly leading to different nodes running different
    versions of the image.
    
    centos7_nginx
    overall progress: 1 out of 1 tasks 
    1/1: running   [==================================================>] 
    verify: Service converged 
     
    一直没去管它,没去仔细的看他,然后就是按照自己的想象在找原因;不要放过任何一个错误,多看;然后其实可以使用systemctl status docker看看docker的状态时不时有error,一看果然是有的,然后得根据日志去查问题。
     
    3)路还很长,得加油
  • 相关阅读:
    码农如何通过编程赚更多的钱
    理解 OAuth 2.0 认证流程
    把同事的代码重写得干净又整洁,老板却让我做回滚?
    精读《如何做好 CodeReview》
    互联网行业的软件与人员的代际更迭随想
    十大最佳自动化测试工具
    使用 docker 高效部署你的前端应用
    在Linux 命令行中转换大小写
    Python批量检测服务器端口可用性与Socket函数使用
    基于华为云CSE微服务接口兼容常见问题
  • 原文地址:https://www.cnblogs.com/lemon-le/p/11675025.html
Copyright © 2011-2022 走看看