目前我有一个强制删除图像的别名,命令如下:
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
而不是组合的tr
and cut
,因为它awk
可以正确处理连续的空格,而无需先进行修剪(另请参阅我的老问题在这里)。