Skip to content

Commit 0476ab6

Browse files
committed
Add user to docker group if not superuser
This allows docker commands to function with a non-root ssh user Fixes: basecamp#980
1 parent a1e40f9 commit 0476ab6

File tree

4 files changed

+11
-0
lines changed

4 files changed

+11
-0
lines changed

lib/kamal/cli/server.rb

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ def bootstrap
3232
if execute(*KAMAL.docker.superuser?, raise_on_non_zero_exit: false)
3333
info "Missing Docker on #{host}. Installing…"
3434
execute *KAMAL.docker.install
35+
execute *KAMAL.docker.add_group
3536
else
3637
missing << host
3738
end

lib/kamal/commands/docker.rb

+5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ def superuser?
1919
[ '[ "${EUID:-$(id -u)}" -eq 0 ] || command -v sudo >/dev/null || command -v su >/dev/null' ]
2020
end
2121

22+
# Add the user to the docker group if we're not root
23+
def add_group
24+
[ '[ "${EUID:-$(id -u)}" -eq 0 ] || sudo usermod -aG docker "${USER:-$(id -un)}"' ]
25+
end
26+
2227
def create_network
2328
docker :network, :create, :kamal
2429
end

test/cli/server_test.rb

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class CliServerTest < CliTestCase
5252
stub_setup
5353
SSHKit::Backend::Abstract.any_instance.expects(:execute).with(:docker, "-v", raise_on_non_zero_exit: false).returns(false).at_least_once
5454
SSHKit::Backend::Abstract.any_instance.expects(:execute).with('[ "${EUID:-$(id -u)}" -eq 0 ] || command -v sudo >/dev/null || command -v su >/dev/null', raise_on_non_zero_exit: false).returns(true).at_least_once
55+
SSHKit::Backend::Abstract.any_instance.expects(:execute).with('[ "${EUID:-$(id -u)}" -eq 0 ] || sudo usermod -aG docker "${USER:-$(id -un)}"').at_least_once
5556
SSHKit::Backend::Abstract.any_instance.expects(:execute).with(:sh, "-c", "'curl -fsSL https://get.docker.com || wget -O - https://get.docker.com || echo \"exit 1\"'", "|", :sh).at_least_once
5657
SSHKit::Backend::Abstract.any_instance.expects(:execute).with(:mkdir, "-p", ".kamal").returns("").at_least_once
5758
Kamal::Commands::Hook.any_instance.stubs(:hook_exists?).returns(true)

test/commands/docker_test.rb

+4
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,8 @@ class CommandsDockerTest < ActiveSupport::TestCase
2323
test "superuser?" do
2424
assert_equal '[ "${EUID:-$(id -u)}" -eq 0 ] || command -v sudo >/dev/null || command -v su >/dev/null', @docker.superuser?.join(" ")
2525
end
26+
27+
test "add_group" do
28+
assert_equal '[ "${EUID:-$(id -u)}" -eq 0 ] || sudo usermod -aG docker "${USER:-$(id -un)}"', @docker.add_group.join(" ")
29+
end
2630
end

0 commit comments

Comments
 (0)