Rootless docker

From UVOO Tech Wiki
Revision as of 02:00, 31 July 2026 by Busk (talk | contribs) (Created page with "Works on Ubuntu 24.04 install-rootless-docker-on-ubuntu.sh ``` #!/bin/bash set -e SERVICE_USER="dockeruser" # 1. Ensure script is run with sudo/root privileges if $EUID...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Works on Ubuntu 24.04

install-rootless-docker-on-ubuntu.sh

#!/bin/bash
set -e

SERVICE_USER="dockeruser"

# 1. Ensure script is run with sudo/root privileges
if [[ $EUID -ne 0 ]]; then
   echo "Error: This script must be run as root. Try using: sudo $0"
   exit 1
fi

echo "==> Installing dependencies..."
apt-get update
apt-get install -y uidmap dbus-user-session slirp4netns docker-ce-rootless-extras

echo "==> Configuring Ubuntu 24.04 unprivileged user namespaces..."
sysctl -w kernel.unprivileged_userns_clone=1
echo "kernel.unprivileged_userns_clone=1" > /etc/sysctl.d/50-rootless-docker.conf

echo "==> Stopping and disabling rootful Docker to prevent socket conflicts..."
systemctl stop docker.service docker.socket || true
systemctl disable docker.service docker.socket || true
rm -f /var/run/docker.sock

echo "==> Creating dedicated user: $SERVICE_USER..."
if id "$SERVICE_USER" &>/dev/null; then
    echo "User $SERVICE_USER already exists, skipping creation."
else
    useradd -m -s /bin/bash "$SERVICE_USER"
    echo "User $SERVICE_USER created successfully."
fi

echo "==> Enabling user lingering (ensures containers run without active SSH session)..."
loginctl enable-linger "$SERVICE_USER"

# Wait a moment for systemd to initialize the new user's DBUS environment
sleep 2

echo "==> Installing Rootless Docker as $SERVICE_USER..."
# We use sudo to switch users and explicitly set XDG_RUNTIME_DIR so systemctl --user works
sudo -i -u "$SERVICE_USER" bash << 'EOF'
    # Define systemd runtime variables for the user session
    export XDG_RUNTIME_DIR="/run/user/$(id -u)"
    export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

    # Run the rootless installer
    dockerd-rootless-setuptool.sh install

    # Configure .bashrc for future logins
    if ! grep -q "DOCKER_HOST" ~/.bashrc; then
        echo 'export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock' >> ~/.bashrc
        echo 'export PATH=/usr/bin:$PATH' >> ~/.bashrc
    fi

    # Start and enable the systemd service for Docker
    systemctl --user enable --now docker

    echo "==> Rootless Docker installed successfully for $(whoami)!"
    docker info | grep -i rootless
EOF

echo "==> Script complete!"
echo "To manage your containers, switch to the new user by running:"
echo "sudo su - $SERVICE_USER"