Как запланировать запуск «docker-compose» в MacOS, используя launchd

468
Nutritioustim

Я создаю некоторое программное обеспечение docker-compose, для которого я хотел бы работать по расписанию.

Поэтому мне нужно запланировать запуск в docker-compose upMacOS (High Sierra, 10.13.3) с использованием launchd . Это конфигурация LaunchAgent, которую я использую.

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>local.edgarlydata</string>  <!-- This script, which calls "docker-compose up" also fails :/  <key>Program</key> <string>/Users/me/my/project/my-script.sh</string> -->  <key>ProgramArguments</key> <array> <string>/usr/local/bin/docker-compose</string> <string>up</string> </array>  <key>StartCalendarInterval</key>  <array> <dict>  <key>Hour</key>  <integer>19</integer>  <key>Minute</key>  <integer>18</integer>  <key>Weekday</key> <integer>3</integer> </dict> </array> </dict> </plist> 

И когда процесс запускается в назначенное время, системный журнал выдает мне это сообщение об ошибке. Нет причин, по которым происходит сбой.

Aug 15 19:18:00 MacBook-Pro com.apple.xpc.launchd[1] (local.edgarlydata[5379]): Service exited with abnormal code: 1 

ИЗМЕНЕНО, чтобы добавить содержание попытки с /Users/me/my/project/my-script.sh. Нет кости.

#!/bin/sh  sudo -u myuser /usr/local/bin/docker-compose up 

Я видел подобный вопрос здесь . Но это было для docker-machine. docker-composeнужно начать с каталога проекта. Излишне говорить, что это не решает проблему.

Есть идеи?

2
Я не знаю launchd, но я нигде не вижу рабочий каталог, а ваш скрипт не cd. Вы уверены, что находитесь в каталоге с docker-compose.yml, когда он запускается? user2313067 6 лет назад 0

2 ответа на вопрос

0
Cameron

В идеале содержимое /Users/me/my/project/my-script.sh

Должно быть просто:

docker compose up 

И большая часть вашей конфигурации Docker должна находиться внутри docker-compose.ymlфайла вашего проекта .

Я отредактировал вопрос, включив в него содержимое этой попытки с помощью `my-script.sh`. Это тоже не работает. Nutritioustim 6 лет назад 0
0
Nutritioustim

Таким образом, я получил это работает, сначала указав StandardErrorPathи StandardOutPath. Эти журналы позволяют мне увидеть, что в моей настройке docker-compose произошла ошибка working_dir. Ранее это был PWD докера, и я жестко запрограммировал его просто в / usr / app

app: image: my/app:latest working_dir: /usr/app volumes: - .:/usr/app entrypoint: run app 

Мой myjob.plist теперь выглядит следующим образом. И это работает для меня. Надеюсь, что это помогает другим.

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>local.myjob</string>  <key>StandardErrorPath</key> <string>/Users/me/Projects/myproject/stderr.log</string>  <key>StandardOutPath</key> <string>/Users/me/Projects/myproject/stdout.log</string>  <key>WorkingDirectory</key> <string>/Users/me/Projects/myproject</string>  <key>EnvironmentVariables</key> <dict> <key>PATH</key> <string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string> </dict> <key>ProgramArguments</key> <array> <string>/usr/local/bin/docker-compose</string> <string>up</string> <string>-d</string> </array>  <key>StartCalendarInterval</key>  <array> <dict>  <key>Hour</key>  <integer>9</integer>  <key>Minute</key>  <integer>30</integer>  <key>Weekday</key> <integer>1</integer> </dict> </array> </dict> </plist>