Skip to content

Running a Docker container via systemd

Create systemd unit file

sudo vim /etc/systemd/system/f-backend.service

Example systemd unit for Docker container

[Unit]
Description=Friend backend docker container
After=docker.service
Requires=docker.service

[Service]
Restart=always
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker rm -f f-backend
ExecStart=/usr/bin/docker run \
  --name f-backend \
  --restart=no \
  -p 5000:5000 \
  -e PG_HOST=10.0.0.2 \
  -e PG_PORT=5432 \
  -e PG_PASSWORD=friend \
  -e PG_USER=supperpassword \
  gitlab.usmonaliyev99.com:5050/apps/f-backend:prod
ExecStop=/usr/bin/docker stop f-backend

[Install]
WantedBy=multi-user.target

I you use your container registry, please login before start systemd.

docker login -u <user> -p <token|password> $CI_REGISTRY

Reload & start service

sudo systemctl daemon-reload
sudo systemctl enable f-backend.service
sudo systemctl start f-backend.service

Check status & logs

systemctl status f-backend.service
journalctl -u f-backend.service -f

If you want to expose it to world, use this nginx conf:

server {
    listen 80;
    server_name f-backend.usmonaliyev99.com;

    access_log /var/log/nginx/f-backend.access.log;
    error_log  /var/log/nginx/f-backend.error.log;

    location / {
        proxy_pass http://127.0.0.1:5000;

        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}