Systemd Service and Docker

Some of my latest Kubernetes adventures have taken me into interesting corners of Linux. I have found myself writing several Systemd service files, which wasn’t near as horrible as I was expecting.

Below is a simple example for “MyDaemon”:

Description = "MyDaemon"



To start the new service is also pretty simple:

systemctl daemon-reload
systemctl start


Docker, Docker, Docker. I find it quite rare these days that I am not running a service in Docker. When writing these Systemd service files, I had this odd feeling nagging at me. It dawned on me that I wasn’t just calling docker and pulling in the latest version, if I wanted these services to keep running I would have vend my own Debian and RPM packages.

So instead I just googled how to run containers as CoreOS does. Below is an example for running “MyDaemon” in Docker via Systemd

Description=MyDaemon Container

ExecStartPre=-/usr/bin/docker stop %n
ExecStartPre=-/usr/bin/docker rm %n
ExecStartPre=/usr/bin/docker pull redis
ExecStart=/usr/bin/docker run --rm --name %n mydaemon
ExecStop=/bin/docker stop %n
ExecReload=/bin/docker restart %n


This apparently has issues (although I haven’t experienced them), it is monitoring the client and not the container, so if the client disconnects from the container then the container will be restarted.

You might also want to check out systemd-docker I haven’t tried it but it is meant to help with several issues, with this setup.

I appreciate feedback so if you feel inclined to do so, reach out to me on twitter: