Skip to content

Commit 6d9c7b2

Browse files
committed
Add Podman check to #running_in_container?
This solves the issue of running Selenium tests on Arm Mac (via Podman Desktop), among other issues.
1 parent 09bda7f commit 6d9c7b2

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

lib/berkeley_library/docker.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module BerkeleyLibrary
77
module Docker
88
class << self
99
def running_in_container?
10-
File.exist?('/.dockerenv') || init_cgroup_is_dockerish?
10+
File.exist?('/.dockerenv') || init_cgroup_is_dockerish? || env_is_podmanish?
1111
end
1212

1313
private
@@ -19,6 +19,10 @@ def init_cgroup_is_dockerish?
1919
false
2020
end
2121
end
22+
23+
def env_is_podmanish?
24+
ENV.fetch('container', '') == 'podman'
25+
end
2226
end
2327
end
2428
end

spec/berkeley_library/docker_spec.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,21 @@ module BerkeleyLibrary
3535

3636
it 'is true when /.dockerenv exists' do
3737
mock_dockerenv
38+
mock_podman_env(false)
3839
expect(BerkeleyLibrary::Docker.running_in_container?).to be true
3940
end
4041

4142
it 'is true when /proc/1/cgroup is docker-like' do
4243
mock_dockerenv(false)
4344
mock_init_cgroup
45+
mock_podman_env(false)
4446
expect(BerkeleyLibrary::Docker.running_in_container?).to be true
4547
end
4648

4749
it 'is false when /proc/1/cgroup is traditional' do
4850
mock_dockerenv(false)
4951
mock_init_cgroup(false)
52+
mock_podman_env(false)
5053
expect(BerkeleyLibrary::Docker.running_in_container?).to be false
5154
end
5255

@@ -55,6 +58,21 @@ module BerkeleyLibrary
5558
expect(File)
5659
.to receive(:open).with('/proc/1/cgroup')
5760
.and_raise(Errno::ENOENT)
61+
mock_podman_env(false)
62+
expect(BerkeleyLibrary::Docker.running_in_container?).to be false
63+
end
64+
65+
it 'is true when container=podman is present in environment' do
66+
mock_dockerenv(false)
67+
mock_init_cgroup(false)
68+
mock_podman_env(true)
69+
expect(BerkeleyLibrary::Docker.running_in_container?).to be true
70+
end
71+
72+
it 'is false when container=podman is not present in environment' do
73+
mock_dockerenv(false)
74+
mock_init_cgroup(false)
75+
mock_podman_env(false)
5876
expect(BerkeleyLibrary::Docker.running_in_container?).to be false
5977
end
6078

@@ -72,6 +90,12 @@ def mock_init_cgroup(dockerish = true)
7290
.and_return(
7391
StringIO.new(dockerish ? DOCKERISH_CGROUP : TRADITIONAL_CGROUP))
7492
end
93+
94+
def mock_podman_env(exists = true)
95+
allow(ENV)
96+
.to receive(:fetch).with('container', '')
97+
.and_return(exists ? 'podman' : '')
98+
end
7599
end
76100
end
77101
end

0 commit comments

Comments
 (0)