@@ -44,26 +44,54 @@ provision:
44
44
#!/bin/bash
45
45
set -eux -o pipefail
46
46
command -v docker >/dev/null 2>&1 && exit 0
47
+ readonly override_conf=/etc/systemd/system/docker.socket.d/override.conf
48
+ if [ ! -e "$override_conf" ]; then
49
+ mkdir -p $(dirname "$override_conf")
50
+ # Alternatively we could just add the user to the "docker" group, but that requires restarting the user session
51
+ cat <<EOF >"$override_conf"
52
+ [Socket]
53
+ SocketUser={{.User}}
54
+ EOF
55
+ fi
47
56
export DEBIAN_FRONTEND=noninteractive
48
57
curl -fsSL https://get.docker.com | sh
49
- # NOTE: you may remove the lines below, if you prefer to use rootful docker, not rootless
50
- systemctl disable --now docker
51
- apt-get install -y dbus-user-session fuse3 jq uidmap
52
- - mode : user
58
+ - mode : user # configure docker under non-root user
53
59
script : |
54
60
#!/bin/bash
55
61
set -eux -o pipefail
56
- systemctl --user start dbus
57
- systemctl list-unit-files --user docker.service &>/dev/null || dockerd-rootless-setuptool.sh install
58
- docker context use rootless
62
+ command -v jq &>/dev/null || sudo apt-get install -y jq
63
+ readonly rootless_installed=$(systemctl --user list-unit-files docker.service &>/dev/null && echo true || echo false)
64
+
65
+ if [ "{{.Param.Rootful}}" = "true" ]; then
66
+ readonly config_dir="/etc/docker"
67
+ readonly systemctl="sudo systemctl"
68
+ readonly tee="sudo tee"
69
+
70
+ [ "$rootless_installed" != "true" ] || systemctl --user disable --now docker
71
+ docker context use default
72
+
73
+ else
74
+ readonly config_dir="$HOME/.config/docker"
75
+ readonly systemctl="systemctl --user"
76
+ readonly tee="tee"
59
77
60
- readonly config="$HOME/.config/docker/daemon.json"
78
+ sudo systemctl disable --now docker.socket docker
79
+ if [ "$rootless_installed" != "true" ]; then
80
+ sudo apt-get install -y dbus-user-session fuse3 uidmap
81
+ $systemctl start dbus
82
+ dockerd-rootless-setuptool.sh install
83
+ fi
84
+ docker context use rootless
85
+ fi
86
+ $systemctl enable --now docker
87
+
88
+ readonly config="$config_dir/daemon.json"
61
89
needs_restart=
62
90
function set_docker_daemon_json() {
63
91
function cat_config() { test -s "$config" && cat "$config" || echo "{}" ; }
64
92
local -r current=$(cat_config | jq -r "$1 // empty")
65
93
[ "$current" = "$2" ] && return 0
66
- mkdir -p $(dirname "$config") && cat_config | jq "$1 = ${2:-empty}" | (sleep 0 && tee "$config") && needs_restart=1
94
+ mkdir -p "$config_dir" && cat_config | jq "$1 = ${2:-empty}" | (sleep 0 && $ tee "$config") && needs_restart=1
67
95
}
68
96
69
97
# enable containerd image store
@@ -72,7 +100,7 @@ provision:
72
100
)"
73
101
74
102
# restart docker to apply the new configuration
75
- [ -z "$needs_restart" ] || systemctl --user restart docker
103
+ [ -z "$needs_restart" ] || $ systemctl restart docker
76
104
probes :
77
105
- script : |
78
106
#!/bin/bash
@@ -81,8 +109,15 @@ probes:
81
109
echo >&2 "docker is not installed yet"
82
110
exit 1
83
111
fi
84
- if ! timeout 30s bash -c "until pgrep rootlesskit; do sleep 3; done"; then
85
- echo >&2 "rootlesskit (used by rootless docker) is not running"
112
+ if [ "{{.Param.Rootful}}" = "true" ]; then
113
+ target=dockerd
114
+ target_description="dockerd"
115
+ else
116
+ target=rootlesskit
117
+ target_description="rootlesskit (used by rootless docker)"
118
+ fi
119
+ if ! timeout 30s bash -c "until pgrep $target; do sleep 3; done"; then
120
+ echo >&2 "$target_description is not running"
86
121
exit 1
87
122
fi
88
123
hint : See "/var/log/cloud-init-output.log" in the guest
@@ -92,7 +127,7 @@ hostResolver:
92
127
hosts :
93
128
host.docker.internal : host.lima.internal
94
129
portForwards :
95
- - guestSocket : " / run/ user/{{.UID}}/docker.sock"
130
+ - guestSocket : " {{if eq .Param.Rootful \" true \" }}/var/ run{{else}}/run/ user/{{.UID}}{{end }}/docker.sock"
96
131
hostSocket : " {{.Dir}}/sock/docker.sock"
97
132
message : |
98
133
To run `docker` on the host (assumes docker-cli is installed), run the following commands:
@@ -103,3 +138,4 @@ message: |
103
138
------
104
139
param :
105
140
ContainerdImageStore : false
141
+ Rootful : false
0 commit comments