2

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

Поэтому мне нужно запланировать запуск docker-compose up в MacOS (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 ответа2

0

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

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

docker compose up

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

0

Итак, я начал работать, указав 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>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .