我正在尝试清理与容器一起使用的(Windows)构建服务器。
我的目标是定期删除不是基本镜像的所有内容,我通过过滤私有(private)注册表名称来做到这一点。当我尝试为此使用PowerShell时,我遇到了这个奇怪的错误:
PS C:\> docker images | Select-String "azurecr" | % { docker rmi $_ }
Error response from daemon: invalid reference format: repository name must be lowercase
Error response from daemon: invalid reference format: repository name must be lowercase
Error response from daemon: invalid reference format: repository name must be lowercase
Error response from daemon: invalid reference format: repository name must be lowercase
Error response from daemon: invalid reference format: repository name must be lowercase
这是我自己运行的
Select-String
过滤器,它返回图像没有问题:docker images | Select-String "azurecr"
尽管错误指出了什么,但注册表或镜像名称中没有大写字符。
也无法正常工作:
PS C:\> (docker images) -like '*azurecr*' | % { docker rmi $_ }
Error response from daemon: invalid reference format: repository name must be lowercase
Error response from daemon: invalid reference format: repository name must be lowercase
Error response from daemon: invalid reference format: repository name must be lowercase
最佳答案
使用-like
运算符过滤docker images
输出。它不仅比Select-String
更轻巧,而且后者还生成MatchInfo
对象,而不是仅传递匹配的字符串,这可能会导致不良行为。另外,您不能只将整行传递给docker rmi
。该命令需要一个图像ID,因此您需要从字符串中提取该ID。
(docker images) -like '*azurecr*' | ForEach-Object {
$id = ($_ -split '\s+')[2]
docker rmi $id
}
关于powershell - Docker rmi:来自守护程序的错误响应:无效的引用格式:存储库名称必须为小写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54187974/