I noticed this error in CI:
```
20:37:25 INFO: Non-base image count on control daemon to delete is 9
20:37:25 "docker rmi" requires at least 1 argument.
20:37:25 See 'docker rmi --help'.
20:37:25
20:37:25 Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]
20:37:25
20:37:25 Remove one or more images
```
Which indicated that the PowerShell script managed to find images to delete, but
not actually passing the images to `docker rmi`.
The reason for this failing was that the script attempted to convert the
collection/array to a string, which produces;
```powershell
Write-Output $(docker images --format "{{.Repository}}:{{.ID}}" | `
>> select-string -NotMatch "windowsservercore" | `
>> select-string -NotMatch "nanoserver" | `
>> select-string -NotMatch "docker" `
>> ).ToString()
System.Object[]
```
Which, when trying to split by the chosen separator (`:`), will return the same;
```powershell
Write-Output "System.Object[]".Split(":")[0]
```
This patch:
- Adds an intermediate variable (`$allImages`) to make the code better readable
- Switches the separator to `#`, to prevent breaking on images pulled from a
repository with a port in its name (`myregistry:5000/my/image`)
- Switches to use a comma-separated list for `-NotMatch` (for readability)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
| ... | ... |
@@ -136,18 +136,14 @@ Function Nuke-Everything {
|
| 136 | 136 |
if ($(docker ps -aq | Measure-Object -line).Lines -gt 0) {
|
| 137 | 137 |
docker rm -f $(docker ps -aq) |
| 138 | 138 |
} |
| 139 |
- $imageCount=($(docker images --format "{{.Repository}}:{{.ID}}" | `
|
|
| 140 |
- select-string -NotMatch "windowsservercore" | ` |
|
| 141 |
- select-string -NotMatch "nanoserver" | ` |
|
| 142 |
- select-string -NotMatch "docker" | ` |
|
| 143 |
- Measure-Object -line).Lines) |
|
| 139 |
+ |
|
| 140 |
+ $allImages = $(docker images --format "{{.Repository}}#{{.ID}}")
|
|
| 141 |
+ $toRemove = ($allImages | Select-String -NotMatch "windowsservercore","nanoserver","docker") |
|
| 142 |
+ $imageCount = ($toRemove | Measure-Object -line).Lines |
|
| 143 |
+ |
|
| 144 | 144 |
if ($imageCount -gt 0) {
|
| 145 | 145 |
Write-Host -Foregroundcolor green "INFO: Non-base image count on control daemon to delete is $imageCount" |
| 146 |
- docker rmi -f ` |
|
| 147 |
- $(docker images --format "{{.Repository}}:{{.ID}}" | `
|
|
| 148 |
- select-string -NotMatch "windowsservercore" | ` |
|
| 149 |
- select-string -NotMatch "nanoserver" | ` |
|
| 150 |
- select-string -NotMatch "docker").ToString().Split(":")[1]
|
|
| 146 |
+ docker rmi -f ($toRemove | Foreach-Object { $_.ToString().Split("#")[1] })
|
|
| 151 | 147 |
} |
| 152 | 148 |
} else {
|
| 153 | 149 |
Write-Host -ForegroundColor Magenta "WARN: Skipping cleanup of images and containers" |