So planen Sie einen Lauf von "Docker-Compose" unter MacOS mithilfe von "launchd"

480
Nutritioustim

Ich baue eine Software mit docker-compose, für die ich nach einem Zeitplan laufen möchte.

Ich muss also einen Lauf docker-compose upauf MacOS (High Sierra, 10.13.3) mit launchd einplanen . Dies ist die LaunchAgent-Konfiguration, die ich verwende.

<?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> 

Wenn der Prozess zum geplanten Zeitpunkt gestartet wird, zeigt das Systemprotokoll diese Fehlermeldung an. Es gibt keinen Grund, warum der Fehler passiert.

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

BEARBEITET, um den Inhalt eines Versuchs mit hinzuzufügen /Users/me/my/project/my-script.sh. Kein Würfel.

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

Ich habe hier eine ähnliche Frage gesehen . Aber das war für docker-machine. docker-composemuss von einem Projektverzeichnis aus starten. Es ist unnötig zu sagen, dass es das Problem nicht löst.

Irgendwelche Ideen?

2
Ich weiß nicht, launchd, aber ich sehe nirgendwo das Arbeitsverzeichnis und Ihr Skript nicht cd. Sind Sie sicher, dass Sie sich in einem Verzeichnis mit einer docker-compose.yml befinden, wenn dies ausgeführt wird? user2313067 vor 5 Jahren 0

2 Antworten auf die Frage

0
Cameron

Idealerweise den Inhalt von /Users/me/my/project/my-script.sh

Sollte nur sein:

docker compose up 

Der Großteil Ihrer Docker-Konfiguration sollte in die Projektdatei aufgenommen docker-compose.ymlwerden.

Ich habe die Frage so bearbeitet, dass der Inhalt dieses Versuchs mit `my-script.sh` eingeschlossen wird. Das geht auch nicht. Nutritioustim vor 5 Jahren 0
0
Nutritioustim

Also bekam ich diese Funktion, zuerst durch Angabe von StandardErrorPathund StandardOutPath. Durch diese Protokolle konnte ich feststellen, dass meine Docker-Compose- working_dir Einstellung fehlerhaft war . Es war früher Dockers PWD, und ich habe es hart in nur / usr / app codiert

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

Meine myjob.plist sieht jetzt so aus. Und das funktioniert für mich. Hoffe das hilft anderen.

<?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>