我正在尝试清理与容器一起使用的(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

powershell - Docker rmi:来自守护程序的错误响应:无效的引用格式:存储库名称必须为小写-LMLPHP

这是我自己运行的Select-String过滤器,它返回图像没有问题:
docker images | Select-String "azurecr"

powershell - Docker rmi:来自守护程序的错误响应:无效的引用格式:存储库名称必须为小写-LMLPHP

尽管错误指出了什么,但注册表或镜像名称中没有大写字符。

也无法正常工作:
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/

10-16 23:56