LINUX.ORG.RU

Запуск Docker Compose через systemd от пользователя

 


0

1
❯ cat ~/.config/systemd/user/docker-compose.service
[Unit]
Description=Docker Compose
After=network.target 
# After=docker.service

[Service]
WorkingDirectory=%h
ExecStart=/usr/bin/docker-compose up -d --remove-orphans
#ExecReload=/usr/bin/docker-compose up -d --remove-orphans
ExecStop=/usr/bin/docker-compose down
#Type=oneshot
#Restart=always

[Install]
WantedBy=default.target

~ 
❯ cat ~/.config/systemd/user/docker-compose.timer  
[Timer]
OnStartupSec=1
# Every 15 minutes
OnCalendar=*:0/15
Persistent=True

[Install]
WantedBy=timers.target

❯ systemctl start --user docker-compose.timer


❯ systemctl status --user docker-compose
Found existing alias for "systemctl status". You should use: "sc-status"
● docker-compose.service - Docker Compose
     Loaded: loaded (/home/sergey/.config/systemd/user/docker-compose.service; disabled; vendor preset: enabled)
     Active: inactive (dead) since Fri 2021-02-19 08:24:09 MSK; 6min ago
TriggeredBy: ● docker-compose.timer
    Process: 26348 ExecStart=/usr/bin/docker-compose up -d --remove-orphans (code=exited, status=0/SUCCESS)
    Process: 26709 ExecStop=/usr/bin/docker-compose down (code=exited, status=0/SUCCESS)
   Main PID: 26348 (code=exited, status=0/SUCCESS)

Feb 19 08:24:08 sergey-pc docker-compose[26709]: Stopping sergey_redis_1    ...
Feb 19 08:24:08 sergey-pc docker-compose[26709]: Stopping sergey_postgres_1 ... done
Feb 19 08:24:08 sergey-pc docker-compose[26709]: Stopping sergey_redis_1    ... done
Feb 19 08:24:08 sergey-pc docker-compose[26709]: Removing sergey_postgres_1 ...
Feb 19 08:24:08 sergey-pc docker-compose[26709]: Removing sergey_redis_1    ...
Feb 19 08:24:08 sergey-pc docker-compose[26709]: Removing sergey_redis_1    ... done
Feb 19 08:24:09 sergey-pc docker-compose[26709]: Removing sergey_postgres_1 ... done
Feb 19 08:24:09 sergey-pc docker-compose[26709]: Removing network sergey_postgres
Feb 19 08:24:09 sergey-pc docker-compose[26709]: Removing network sergey_redis
Feb 19 08:24:09 sergey-pc systemd[1363]: docker-compose.service: Succeeded.


~ 
❯ docker-compose up -d --remove-orphans
Found existing alias for "docker-compose up -d". You should use: "dcupd"
Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/
Creating network "sergey_postgres" with driver "bridge"
Creating network "sergey_redis" with driver "bridge"
Creating sergey_redis_1    ... done
Creating sergey_postgres_1 ... done

~ took 2s 
❯ psql -U postgres -h 'localhost'
Password for user postgres: 
psql (13.2)
Type "help" for help.

postgres=# \q

~ 
❯ docker-compose down   
Found existing alias for "docker-compose down". You should use: "dcdn"
Stopping sergey_postgres_1 ... done
Stopping sergey_redis_1    ... done
Removing sergey_postgres_1 ... done
Removing sergey_redis_1    ... done
Removing network sergey_postgres
Removing network sergey_redis

Мне непонятно:

  1. Почему docker-compose.timer: Failed to queue unit startup job: Unit docker.service not found., ведь:
❯ systemctl status docker               
Found existing alias for "systemctl status". You should use: "sc-status"
● docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
     Active: active (running) since Fri 2021-02-19 04:49:35 MSK; 3h 45min ago
...
  1. Почему юнит останавливает контейнеры и удаляет сети, т.е. выполняется docker-compose down?

Я ожидал что все будет работать. Такое поведение для меня загадка. Ест-но если через систему запускать, то все нормально…

★★

Я так пологаю, нужно добавить вот это в Service часть, так как docker-compose -d сразу возвращает управление и контейнеры висят в бекграунде

Type=oneshot
RemainAfterExit=true

Это должно починить 2, хз про 1.

rbbtnspc
()
Последнее исправление: rbbtnspc (всего исправлений: 2)
Ответ на: комментарий от rbbtnspc

я прочитал документацию по systemd пользовательский инстанс никак не может зависеть от системного.

❯ systemctl --user enable --now docker-compose@dev
Found existing alias for "systemctl --user enable". You should use: "scu-enable"
Created symlink /home/sergey/.config/systemd/user/default.target.wants/docker-compose@dev.service → /home/sergey/.config/systemd/user/docker-compose@.service.

~ took 3s 
❯ psql -U postgres -h 'localhost'
Password for user postgres: 
psql (13.2)
Type "help" for help.

postgres=# \q

~ took 6s 
❯ cat ~/.config/systemd/user/docker-compose@.service
[Unit]
Description=docker-compose %i service
# Пользоватьские юниты не могут зависеть от системных
#After=network-online.target docker.socket
#Wants=network-online.target
#Requires=docker.socket

[Service]
WorkingDirectory=%h
ExecStart=/usr/bin/docker-compose up -d
ExecReload=/usr/bin/docker-compose up -d
ExecStop=/usr/bin/docker-compose down
Type=oneshot
# После выхода из программы не убиваем запущенный процесс
RemainAfterExit=yes
Restart=on-failure
RestartSec=60

[Install]
WantedBy=default.target

~ 
❯ cat ~/.config/systemd/user/docker-compose@.timer  
[Unit]

[Timer]
OnStartupSec=1
# Every 15 minutes
OnCalendar=*:0/15
Persistent=true

[Install]
WantedBy=timers.target


~ 
❯ 

tz4678 ★★
() автор топика
Последнее исправление: tz4678 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.