diff --git a/config/initializers/mixins.rb b/config/initializers/mixins.rb new file mode 100644 index 00000000..ca527e2d --- /dev/null +++ b/config/initializers/mixins.rb @@ -0,0 +1 @@ +Docker::Container::send(:include, DockerContainerMixin) diff --git a/lib/docker_client.rb b/lib/docker_client.rb index 00fd8872..c3a87c51 100644 --- a/lib/docker_client.rb +++ b/lib/docker_client.rb @@ -62,11 +62,9 @@ class DockerClient def self.destroy_container(container) container.stop.kill - if container.json['HostConfig']['PortBindings'] - container.json['HostConfig']['PortBindings'].values.each do |configuration| - port = configuration.first['HostPort'].to_i - PortPool.release(port) - end + (container.port_bindings.try(:values) || []).each do |configuration| + port = configuration.first['HostPort'].to_i + PortPool.release(port) end container.delete(force: true) end diff --git a/lib/docker_container_mixin.rb b/lib/docker_container_mixin.rb new file mode 100644 index 00000000..0563831f --- /dev/null +++ b/lib/docker_container_mixin.rb @@ -0,0 +1,9 @@ +module DockerContainerMixin + def binds + json['HostConfig']['Binds'] + end + + def port_bindings + json['HostConfig']['PortBindings'] + end +end diff --git a/spec/lib/docker_container_mixin_spec.rb b/spec/lib/docker_container_mixin_spec.rb new file mode 100644 index 00000000..24e45be9 --- /dev/null +++ b/spec/lib/docker_container_mixin_spec.rb @@ -0,0 +1,11 @@ +require 'rails_helper' + +describe DockerContainerMixin do + [:binds, :port_bindings].each do |method| + describe "##{method}" do + it 'is defined for Docker::Container' do + expect(Docker::Container.instance_methods).to include(method) + end + end + end +end