代码之家  ›  专栏  ›  技术社区  ›  Pitel

如何检查Docker Pull是否真的拉了什么东西

  •  2
  • Pitel  · 技术社区  · 6 年前

    我有以下脚本来更新我的nextcloud:

    #!/bin/bash
    
    set -ex
    
    docker pull nextcloud
    docker rm -f nextcloud
    docker run -d -p 8080:80 -v nextcloud:/var/www/html --name nextcloud --restart=unless-stopped nextcloud
    docker image prune -f
    

    问题是,即使没有新的可拉容器,它也会创建新的容器。

    我怎么检查,如果 docker pull 真的拉了点什么,或者我的图像已经更新了?的退出代码 码头工人拉 在两种情况下均为0。

    4 回复  |  直到 6 年前
        1
  •  3
  •   anubhava    6 年前

    您可以检查的输出 docker pull 命令:

    #!/bin/bash    
    set -ex
    
    out=$(docker pull nextcloud)
    
    if [[ $out != *"up to date"* ]]; then
       docker stop nextcloud
       docker rm -f nextcloud
       docker run -d -p 8080:80 -v nextcloud:/var/www/html --name nextcloud -- 
       restart=unless-stopped nextcloud
       docker image prune -f
    fi
    
        2
  •  1
  •   gcharbon    6 年前

    首先,如果不指定您暗示要提取最新版本的标记。为了更清楚地说明,您可以:

    #!/bin/bash
    
    set -ex
    
    docker pull nextcloud:latest
    docker rm -f nextcloud
    docker run -d -p 8080:80 -v nextcloud:/var/www/html --name nextcloud --restart=unless-stopped nextcloud:latest
    docker image prune -f
    

    如果你想知道你是否拉了一个图像,我认为你说的对,退出代码总是0,无论docker拉一个新的图像还是本地图像已经是最新的。但你可以抓住docker pull命令的输出,grep Status: Image is up to date... Status: Downloaded newer image...

    类似:

    docker pull nextcloud:latest | grep "Image is up to date" && echo "Didn't downloaded anything" || echo "Downloaded new image"

    把所有东西放在一起:

    #!/bin/bash
    
    set -ex
    
    docker pull nextcloud:latest | grep "Image is up to date" && pull_status="already_pulled" || pull_status="newly_pulled"
    
    if [ "$pull_status" = "newly_pulled" ]; then
    docker rm -f nextcloud
    docker run -d -p 8080:80 -v nextcloud:/var/www/html --name nextcloud --restart=unless-stopped nextcloud:latest
    docker image prune -f
    fi
    
        3
  •  1
  •   vimal-k    6 年前

    您可以获取本地可用版本的映像ID,例如:

    > docker image ls nginx:latest | awk '/nginx/ {print $3}'
    > 649dcb69b782
    

    “latest”是默认使用的标记。

    在执行Docker Pull时,可以再次使用该命令检查图像ID是否已更改,然后相应地执行操作。

        4
  •  0
  •   tgogos    6 年前

    您可能还会发现这些信息很有用…

    docs :

    更新到新版本

    更新nextcloud容器是通过拉新图像、丢弃旧容器并启动新的映像来完成的。因为所有数据都存储在卷中,所以不会丢失任何数据。 启动脚本将检查卷中的版本和已安装的Docker版本。如果发现不匹配,它会自动启动升级过程。 . 不要忘记将所有卷添加到新容器中,这样它就可以按预期工作。

    $ docker pull nextcloud
    $ docker stop <your_nextcloud_container>
    $ docker rm <your_nextcloud_container>
    $ docker run <OPTIONS> -d nextcloud
    

    注意,必须使用最初启动nextcloud时使用的选项运行相同的命令。包括卷、端口映射。