开发者社区> 问答> 正文

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

我在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: 每个图像的错误。但是如果我在该节点上执行相同的命令,它就会成功。我不确定这里有什么问题。

展开
收起
k8s小能手 2019-01-09 14:42:48 3704 0
1 条回答
写回答
取消 提交回答
  • 整合最优质的专家资源和技术资料,问答解疑

    问题是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"

    2019-07-17 23:25:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
应用 Docker 进行持续交付:用技术改变交付路程 立即下载
从Docker到容器服务 立即下载
Docker@Alibaba——超大规模Docker化的实战经验 立即下载