1. 程式人生 > >Docker service update更新不成功的問題

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)路還很長,得加油

&n