Skip to content

Commit 2304e98

Browse files
committed
docker-rootful.yaml: make everything common except for setting .param.Rootful=true in docker.yaml.
Signed-off-by: Norio Nomura <[email protected]>
1 parent 174e67a commit 2304e98

File tree

1 file changed

+65
-8
lines changed

1 file changed

+65
-8
lines changed

Diff for: examples/docker-rootful.yaml

+65-8
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,63 @@ provision:
4444
#!/bin/bash
4545
set -eux -o pipefail
4646
command -v docker >/dev/null 2>&1 && exit 0
47-
if [ ! -e /etc/systemd/system/docker.socket.d/override.conf ]; then
48-
mkdir -p /etc/systemd/system/docker.socket.d
47+
readonly override_conf=/etc/systemd/system/docker.socket.d/override.conf
48+
if [ ! -e "$override_conf" ]; then
49+
mkdir -p $(dirname "$override_conf")
4950
# Alternatively we could just add the user to the "docker" group, but that requires restarting the user session
50-
cat <<-EOF >/etc/systemd/system/docker.socket.d/override.conf
51-
[Socket]
52-
SocketUser={{.User}}
51+
cat <<EOF >"$override_conf"
52+
[Socket]
53+
SocketUser={{.User}}
5354
EOF
5455
fi
5556
export DEBIAN_FRONTEND=noninteractive
5657
curl -fsSL https://get.docker.com | sh
58+
- mode: user # configure docker under non-root user
59+
script: |
60+
#!/bin/bash
61+
set -eux -o pipefail
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"
77+
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"
89+
needs_restart=
90+
function set_docker_daemon_json() {
91+
function cat_config() { test -s "$config" && cat "$config" || echo "{}" ; }
92+
local -r current=$(cat_config | jq -r "$1 // empty")
93+
[ "$current" = "$2" ] && return 0
94+
mkdir -p "$config_dir" && cat_config | jq "$1 = ${2:-empty}" | (sleep 0 && $tee "$config") && needs_restart=1
95+
}
96+
97+
# enable containerd image store
98+
set_docker_daemon_json '.features."containerd-snapshotter"' "$(
99+
[ "{{.Param.ContainerdImageStore}}" = "true" ] && echo 'true'
100+
)"
101+
102+
# restart docker to apply the new configuration
103+
[ -z "$needs_restart" ] || $systemctl restart docker
57104
probes:
58105
- script: |
59106
#!/bin/bash
@@ -62,8 +109,15 @@ probes:
62109
echo >&2 "docker is not installed yet"
63110
exit 1
64111
fi
65-
if ! timeout 30s bash -c "until pgrep dockerd; do sleep 3; done"; then
66-
echo >&2 "dockerd 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"
67121
exit 1
68122
fi
69123
hint: See "/var/log/cloud-init-output.log" in the guest
@@ -73,7 +127,7 @@ hostResolver:
73127
hosts:
74128
host.docker.internal: host.lima.internal
75129
portForwards:
76-
- guestSocket: "/var/run/docker.sock"
130+
- guestSocket: "{{if eq .Param.Rootful \"true\"}}/var/run{{else}}/run/user/{{.UID}}{{end}}/docker.sock"
77131
hostSocket: "{{.Dir}}/sock/docker.sock"
78132
message: |
79133
To run `docker` on the host (assumes docker-cli is installed), run the following commands:
@@ -82,3 +136,6 @@ message: |
82136
docker context use lima-{{.Name}}
83137
docker run hello-world
84138
------
139+
param:
140+
ContainerdImageStore: false
141+
Rootful: true

0 commit comments

Comments
 (0)