Prune unused images correctly
dangling=true doesn't prune any images, as we are not creating dangling images. Using --all should remove unused images, but it considers the Git SHA tag on the latest image to be unused (presumably because there are two tags, the SHA and latest and the running container is only considered to be using "latest"). As a result it deletes the tag, which means that we can't rollback to that SHA later. Its a bit more complicated to only remove images that are not referenced by any containers. First we find the tags we want to keep from the containers (running and stopped). Then we append the latest tag to that list. Then we get a full list of image tags and remove those tags from that list (using `grep -v -w`). Finally we pass the tags to `docker rmi`. That either deletes the tag if there are other references to the image or both the tag and the image if it is the only one.
This commit is contained in:
@@ -10,7 +10,7 @@ class CliPruneTest < CliTestCase
|
||||
|
||||
test "images" do
|
||||
run_command("images").tap do |output|
|
||||
assert_match /docker image prune --force --filter label=service=app --filter dangling=true on 1.1.1.\d/, output
|
||||
assert_match "docker image ls --filter label=service=app --format '{{.Repository}}:{{.Tag}}' | grep -v -w \"$(docker container ls -a --format '{{.Image}}\\|' --filter label=service=app | tr -d '\\n')dhh/app:latest\" | while read tag; do docker rmi $tag; done on 1.1.1.", output
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user