Skip to content

Instantly share code, notes, and snippets.

@adorobis
Forked from tprelog/enable-docker.sh
Created February 14, 2022 12:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save adorobis/30b57e03ee6813d18bea400c2de92e83 to your computer and use it in GitHub Desktop.
Save adorobis/30b57e03ee6813d18bea400c2de92e83 to your computer and use it in GitHub Desktop.
Enable Docker on TrueNAS SCALE (without kubernetes)
#!/usr/bin/env bash
#
# Enable Docker on TrueNAS SCALE (no Kubernetes)
#
# This script is a hack! Use it at your own risk!!
# Using this script to enable Docker is NOT SUPPORTED by ix-systems!
# You can NOT use SCALE Apps while using this script!
#
# 1 Create a dedicated Docker dataset in one of your zpools
# 2 Save this script somewhere else on your zpool, not in the Docker dataset
# 3 Edit line 20 of the script, set a path to the Docker dataset you created
# 4 You can now start Docker by running the script from the SCALE console
#
# For these changes to persist after SCALE reboots and upgrades, run the script at start-up
# Schedule this script to run via System Settings -> Advanced -> Init/Shutdown Scripts
# Click Add -> Type: Script and choose this script -> When: choose to run as Post Init
## set a path to your docker dataset
docker_dataset='/mnt/tank/docker'
## --- DOCKER DAEMON HEREDOC -----
read -r -d '' JSON << END_JSON
{
"data-root": "${docker_dataset}"
}
END_JSON
## path to docker daemon file
docker_daemon='/etc/docker/daemon.json'
if [ ${EUID} -ne 0 ]; then
echo "Please run this script as root or using sudo" ; exit 1
elif [ "$(systemctl is-active k3s)" == "active" ]; then
echo "You can not use this script while k3s is active" ; exit 1
elif ! which docker &> /dev/null; then
echo "Docker executable not found" ; exit 1
elif ! install -d -m 755 -- /etc/docker &> /dev/null; then
echo "Failed to install directory: /etc/docker" ; exit 1
elif ! zfs list "${docker_dataset}" &> /dev/null; then
echo "Dataset not found: ${docker_dataset}" ; exit 1
else
echo "Checking file: ${docker_daemon}"
if test "${JSON}" != "$(cat ${docker_daemon} 2> /dev/null)"; then
echo "Updating file: ${docker_daemon}"
jq -n "${JSON}" > ${docker_daemon}
if [ "$(systemctl is-active docker)" == "active" ]; then
echo "Restarting Docker"
systemctl restart docker
elif [ "$(systemctl is-enabled docker)" != "enabled" ]; then
echo "Enable and starting Docker"
systemctl enable --now docker
fi
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment