From 81d56a8af44e41d7cc8ad2bbaad5da248ed661e9 Mon Sep 17 00:00:00 2001 From: eszense <25100769+eszense@users.noreply.github.com> Date: Sat, 4 Jan 2025 21:57:35 +0800 Subject: [PATCH 1/2] docker provider: Don't explode when removing an image if it is in use Handles the slightly different error text when podman backend is used: `Stderr: Error response from daemon: image xxx is in use: image used by yyy: image is in use by a container: consider listing external containers and force-removing image ` --- plugins/providers/docker/driver.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/providers/docker/driver.rb b/plugins/providers/docker/driver.rb index f71ec1673..078a544bc 100644 --- a/plugins/providers/docker/driver.rb +++ b/plugins/providers/docker/driver.rb @@ -225,8 +225,9 @@ module VagrantPlugins execute('docker', 'rmi', id) return true rescue => e - return false if e.to_s.include?("is using it") - return false if e.to_s.include?("is being used") + return false if e.to_s.include?("is using it") or + e.to_s.include?("is being used") or + e.to_s.include?("is in use") raise if !e.to_s.include?("No such image") end From 6729d2546c0f1bf0387c241f962a23fa32a9315b Mon Sep 17 00:00:00 2001 From: Allison Larson Date: Fri, 14 Mar 2025 16:22:13 -0700 Subject: [PATCH 2/2] provider/docker: add test case for podman message to #rmi --- test/unit/plugins/providers/docker/driver_test.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/unit/plugins/providers/docker/driver_test.rb b/test/unit/plugins/providers/docker/driver_test.rb index f68bf52ea..ed06a1610 100644 --- a/test/unit/plugins/providers/docker/driver_test.rb +++ b/test/unit/plugins/providers/docker/driver_test.rb @@ -579,6 +579,15 @@ describe VagrantPlugins::DockerProvider::Driver do subject.rmi(id) end end + + context 'image is in use by a container' do + before { allow(subject).to receive(:execute).and_raise("image is in use by a container") } + + it 'does not remove the image' do + expect(subject.rmi(id)).to eq(false) + subject.rmi(id) + end + end end describe '#inspect_container' do