开发者社区> 问答> 正文

在CentOS上远程删除docker镜像的问题

k8s小能手 2019-01-09 14:42:48 599

我在5个不同的CentOS节点上使用Rancher安装了一个Kubernetes集群(比如node1,node2,...,node5)。对于我们的CI运行,我们需要在每次运行之前清理过时的docker镜像。我创建了一个在node1上运行的脚本,并且从node1到其余节点启用了无密码ssh。脚本的相关部分如下所示:

!/bin/bash

helm ls --short --all | xargs -L1 helm delete --purge

echo "Deleting old data and docker images from Rancher host node."
rm -rf /var/lib/hadoop/ /opt/ci/
docker images | grep localhost | awk '{print $3}' | xargs docker rmi -f

hosts=(node2 node3 node4 node5)
for host in ${hosts[*]}
do
echo "Deleting old data and docker images from ${host}"
ssh root@${host} docker images | grep localhost | awk '{print $3}' | xargs docker rmi -f
ssh root@${host} rm -rf /var/lib/hadoop/ /opt/ci/
done
echo "All deletions are complete! Proceeding with installation."

sleep 2m
问题是,虽然docker rmifor循环内的命令运行所有其他4个节点,但我得到Error: No such image: 每个图像的错误。但是如果我在该节点上执行相同的命令,它就会成功。我不确定这里有什么问题。

分布式计算 Kubernetes Hadoop Linux Shell 网络安全 数据安全/隐私保护 Docker 容器 Perl
分享到
取消 提交回答
全部回答(1)
  • k8s小能手
    2019-07-17 23:25:01

    问题是ssh管道中唯一的第一个命令是远程执行的:

    ssh root@${host} docker images | grep localhost | awk '{print $3}' | xargs docker rmi -f

    ssh ssh-arguments | grep grep-arguments | awk awk-arguments | xarg xarg-arguments
    结果是唯一docker images的远程执行。然后,从远程的输出docker images被传递到本地机器在那里它被滤波grep,并awk然后docker rmi本地计算机上被执行。

    有必要添加引号以通知shell命令行中的所有内容都是ssh参数:

    ssh root@${host} "docker images | grep localhost | awk '{print $3}' | xargs docker rmi -f"

    0 0
+ 订阅

云原生时代,是开发者最好的时代

推荐文章
相似问题