Use systemd to start docker-compose services.
Single service
The simplest solution is to create basic service file.
$ sudo tee /etc/systemd/system/pihole.service <<EOF [Unit] Description=pihole service Requires=docker.service After=docker.service [Service] Restart=always User=pihole Group=pihole WorkingDirectory=/opt/services/pihole ExecStart=/usr/bin/docker-compose -f docker-compose.yml up ExecStop=/usr/bin/docker-compose -f docker-compose.yml down [Install] WantedBy=multi-user.target EOF
Reload systemd configuration.
$ sudo systemctl daemon-reload
Enable and start service.
$ sudo systemctl enable --now pihole
Inspect service status.
$ sudo systemctl status --now pihole
● pihole.service - pihole service Loaded: loaded (/etc/systemd/system/pihole.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-12-22 18:20:58 CET; 479ms ago Main PID: 288010 (docker-compose) Tasks: 1 (limit: 779) CPU: 468ms CGroup: /system.slice/pihole.service └─288010 /usr/bin/python3 /usr/bin/docker-compose -f docker-compose.yml up Dec 22 18:20:58 raspberrypi systemd[1]: Started pihole service.
Multiple services
Create service template that will start docker-compose inside /opt/services/
sub-directory and dedicated user.
$ sudo tee /etc/systemd/system/docker-compose.service@ <<EOF [Unit] Description=%I service Requires=docker.service After=docker.service [Service] Restart=always User=%I Group=%I WorkingDirectory=/opt/services/%I ExecStart=/usr/bin/docker-compose -f docker-compose.yml up ExecStop=/usr/bin/docker-compose -f docker-compose.yml down [Install] WantedBy=multi-user.target EOF
Reload systemd configuration.
$ sudo systemctl daemon-reload
Enable and start service.
$ sudo systemctl enable --now docker-compose@pihole
Inspect service status.
$ sudo systemctl status --now docker-compose@pihole
● docker-compose@pihole.service - pihole service Loaded: loaded (/etc/systemd/system/docker-compose@.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-12-22 18:27:58 CET; 479ms ago Main PID: 288012 (docker-compose) Tasks: 1 (limit: 779) CPU: 468ms CGroup: /system.slice/system-docker\x2dcompose.slice/docker-compose@pihole.service └─288012 /usr/bin/python3 /usr/bin/docker-compose -f docker-compose.yml up Dec 22 18:27:58 raspberrypi systemd[1]: Started pihole service.