sha256:0016244f85020ab3bd090168de604e8b80f50d5bd9dec075a18fb1bb6a4f7957
Last pushed
about 9 hours by sbx
Type
Sandbox Kit
Manifest digest
sha256:0016244f85020ab3bd090168de604e8b80f50d5bd9dec075a18fb1bb6a4f7957
schemaVersion: "3"
displayName: Docker over TCP
description: Serve the sandbox's Docker Engine on TCP port 2375 and publish it on the host's loopback, so a Docker client on the host can run containers inside the sandbox.
version: 0.1.0
kind: mixin
provides:
- docker-tcp
requires:
- deb/curl
- deb/docker-ce
- deb/jq
- deb/procps
capabilities:
- type: com.docker.sandbox/port@1
config:
container: 2375
name: docker-api
- type: com.docker.sandbox/lifecycle@1
config:
startup:
- command: |
set -eu
cfg=/etc/docker/daemon.json
tcp=tcp://0.0.0.0:2375
probe() { curl -sf --max-time 2 http://127.0.0.1:2375/_ping >/dev/null 2>&1; }
command -v dockerd >/dev/null || { echo "docker-tcp: dockerd is not installed in this sandbox" >&2; exit 1; }
mkdir -p /etc/docker
[ -s "$cfg" ] || echo '{}' > "$cfg"
jq --arg tcp "$tcp" '.hosts = (((.hosts // []) + ["unix:///var/run/docker.sock", $tcp]) | unique)' "$cfg" > "$cfg.tmp"
if [ "$(cat "$cfg")" = "$(cat "$cfg.tmp")" ]; then rm -f "$cfg.tmp"; else mv "$cfg.tmp" "$cfg"; fi
probe && exit 0
if pkill -x dockerd; then
n=0
while pgrep -x dockerd >/dev/null; do
n=$((n + 1))
[ "$n" -lt 150 ] || { echo "docker-tcp: dockerd did not stop" >&2; exit 1; }
sleep 0.2
done
fi
nohup sh -c 'echo $$ > /var/run/sandboxes-dockerd.pid; exec dockerd >> /var/log/dockerd.log 2>&1' </dev/null >/dev/null 2>&1 &
n=0
until probe; do
n=$((n + 1))
if [ "$n" -ge 60 ]; then
echo "docker-tcp: dockerd did not come up on $tcp" >&2
tail -n 30 /var/log/dockerd.log >&2
exit 1
fi
sleep 0.5
done
description: Make dockerd listen on tcp://0.0.0.0:2375 as well as the unix socket.
user: root