Rootless docker
Jump to navigation
Jump to search
Works on Ubuntu 24.04
https://docs.docker.com/engine/security/rootless/
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"