Create a systemd service for your docker-compose project in 10 seconds
Run this in the directory where docker-compose.yml
is located:
curl -fsSL https://techoverflow.net/scripts/create-docker-compose-service.sh | sudo bash /dev/stdin
This script will automatically create a systemd service that starts docker-compose up
and shuts down using docker-compose down
. Our script will also systemctl enable
the script (i.e. start automatically on boot) and systemctl start
it (start it immediately).
How it works
The command above will download the script from TechOverflow and run it in bash
:
#!/bin/bash
# Create a systemd service that autostarts & manages a docker-compose instance in the current directory
# by Uli Köhler - https://techoverflow.net
# Licensed as CC0 1.0 Universal
SERVICENAME=$(basename $(pwd))
echo "Creating systemd service... /etc/systemd/system/${SERVICENAME}.service"
# Create systemd service file
sudo cat >/etc/systemd/system/$SERVICENAME.service <<EOF
[Unit]
Description=$SERVICENAME
Requires=docker.service
After=docker.service
[Service]
Restart=always
User=root
Group=docker
TimeoutStopSec=15
WorkingDirectory=$(pwd)
# Shutdown container (if running) when unit is started
ExecStartPre=$(which docker-compose) -f docker-compose.yml down
# Start container when unit is started
ExecStart=$(which docker-compose) -f docker-compose.yml up
# Stop container when unit is stopped
ExecStop=$(which docker-compose) -f docker-compose.yml down
[Install]
WantedBy=multi-user.target
EOF
echo "Enabling & starting $SERVICENAME"
# Autostart systemd service
sudo systemctl enable $SERVICENAME.service
# Start systemd service now
sudo systemctl start $SERVICENAME.service
The service name is the directory name:
SERVICENAME=$(basename $(pwd))
Now we will create the service file in /etc/systemd/system/${SERVICENAME}.service
using the template embedded in the script
The script will automatically determine the location of docker-compose
using $(which docker-compose)
and finally enable and start the systemd
service:
# Autostart systemd service
sudo systemctl enable $SERVICENAME.service
# Start systemd service now
sudo systemctl start $SERVICENAME.service