用于删除 docker 镜像的 Bash 别名不使用强制标志

用于删除 docker 镜像的 Bash 别名不使用强制标志

目前我有一个强制删除图像的别名,命令如下:

docker rmi $(docker images | grep pattern | grep -v other_pattern | tr -s ' ' | cut -d ' ' -f 3) -f

在我看来~/.bashrc它看起来像:

rm_images="docker rmi $(docker images | grep pattern | grep -v other_pattern | tr -s ' ' | cut -d ' ' -f 3) -f"

然而执行时我得到以下信息:

Error response from daemon: conflict: unable to delete <image_id> (must be forced) - image is referenced in multiple repositories

答案1

首先,你应该遵循原始文件,即docker rmi -f <images>

此外,定义别名时,每次运行别名时都应使用单引号来评估表达式。如果使用双引号(如问题中所示),则仅在定义别名时评估表达式(也看这里)。

因此,请按如下方式定义您的别名(假设您的命令替换是正确的):

alias rm_images='docker rmi -f $(docker images | grep pattern | grep -v other_pattern | tr -s " " | cut -d " " -f 3)'

请注意,命令替换中的每个单引号现在都已被双引号替换,这对于这些命令同样有效。

最后,您可以考虑使用awk而不是组合的trand cut,因为它awk可以正确处理连续的空格,而无需先进行修剪(另请参阅我的老问题在这里)。

相关内容