diff --git a/lib/berkeley_library/docker.rb b/lib/berkeley_library/docker.rb index c673670..ec37a41 100644 --- a/lib/berkeley_library/docker.rb +++ b/lib/berkeley_library/docker.rb @@ -7,7 +7,7 @@ module BerkeleyLibrary module Docker class << self def running_in_container? - File.exist?('/.dockerenv') || init_cgroup_is_dockerish? + File.exist?('/.dockerenv') || init_cgroup_is_dockerish? || env_is_podmanish? end private @@ -19,6 +19,10 @@ def init_cgroup_is_dockerish? false end end + + def env_is_podmanish? + ENV.fetch('container', '') == 'podman' + end end end end diff --git a/lib/berkeley_library/docker/module_info.rb b/lib/berkeley_library/docker/module_info.rb index 9875b0f..3536224 100644 --- a/lib/berkeley_library/docker/module_info.rb +++ b/lib/berkeley_library/docker/module_info.rb @@ -1,14 +1,16 @@ +# frozen_string_literal: true + module BerkeleyLibrary module Docker class ModuleInfo - NAME = 'berkeley_library-docker'.freeze - AUTHOR = 'Dan Schmidt'.freeze - AUTHOR_EMAIL = 'danschmidt5189@berkeley.edu'.freeze - SUMMARY = 'Utility functions for Dockerizing Ruby apps'.freeze - DESCRIPTION = 'Utility functions for making Ruby apps "just work" in Docker containers.'.freeze - LICENSE = 'MIT'.freeze - VERSION = '0.2.0'.freeze - HOMEPAGE = 'https://github.com/BerkeleyLibrary/docker'.freeze + NAME = 'berkeley_library-docker' + AUTHOR = 'Dan Schmidt' + AUTHOR_EMAIL = 'danschmidt5189@berkeley.edu' + SUMMARY = 'Utility functions for Dockerizing Ruby apps' + DESCRIPTION = 'Utility functions for making Ruby apps "just work" in Docker containers.' + LICENSE = 'MIT' + VERSION = '0.3.0.a1' + HOMEPAGE = 'https://github.com/BerkeleyLibrary/ruby-docker' private_class_method :new end diff --git a/spec/berkeley_library/docker_spec.rb b/spec/berkeley_library/docker_spec.rb index 5e3f68f..2083947 100644 --- a/spec/berkeley_library/docker_spec.rb +++ b/spec/berkeley_library/docker_spec.rb @@ -35,18 +35,21 @@ module BerkeleyLibrary it 'is true when /.dockerenv exists' do mock_dockerenv + mock_podman_env(false) expect(BerkeleyLibrary::Docker.running_in_container?).to be true end it 'is true when /proc/1/cgroup is docker-like' do mock_dockerenv(false) mock_init_cgroup + mock_podman_env(false) expect(BerkeleyLibrary::Docker.running_in_container?).to be true end it 'is false when /proc/1/cgroup is traditional' do mock_dockerenv(false) mock_init_cgroup(false) + mock_podman_env(false) expect(BerkeleyLibrary::Docker.running_in_container?).to be false end @@ -55,6 +58,21 @@ module BerkeleyLibrary expect(File) .to receive(:open).with('/proc/1/cgroup') .and_raise(Errno::ENOENT) + mock_podman_env(false) + expect(BerkeleyLibrary::Docker.running_in_container?).to be false + end + + it 'is true when container=podman is present in environment' do + mock_dockerenv(false) + mock_init_cgroup(false) + mock_podman_env(true) + expect(BerkeleyLibrary::Docker.running_in_container?).to be true + end + + it 'is false when container=podman is not present in environment' do + mock_dockerenv(false) + mock_init_cgroup(false) + mock_podman_env(false) expect(BerkeleyLibrary::Docker.running_in_container?).to be false end @@ -72,6 +90,12 @@ def mock_init_cgroup(dockerish = true) .and_return( StringIO.new(dockerish ? DOCKERISH_CGROUP : TRADITIONAL_CGROUP)) end + + def mock_podman_env(exists = true) + allow(ENV) + .to receive(:fetch).with('container', '') + .and_return(exists ? 'podman' : '') + end end end end