Como programar uma execução de “docker-compose,” no MacOS, usando o launchd

2

Estou criando alguns softwares com docker-compose , para os quais gostaria de executar um cronograma.

Portanto, preciso agendar uma execução de docker-compose up no MacOS (High Sierra, 10.13.3), usando o launchd . Esta é a configuração do LaunchAgent que estou usando.

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

E quando o processo é iniciado no horário agendado, o log do sistema me fornece essa mensagem de erro. Não há nenhuma razão para porque a falha está acontecendo.

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

EDITADO para adicionar o conteúdo de uma tentativa com /Users/me/my/project/my-script.sh . Sem dados.

#!/bin/sh

sudo -u myuser /usr/local/bin/docker-compose up

Eu vi uma pergunta semelhante aqui . Mas isso foi para docker-machine . docker-compose precisa ser iniciado a partir de um diretório de projeto. Escusado será dizer que não resolve o problema.

Alguma ideia?

    
por Nutritioustim 16.08.2018 / 04:39

2 respostas

0

Idealmente, o conteúdo de /Users/me/my/project/my-script.sh

Deve ser apenas:

docker compose up

E a maioria da sua configuração do Docker deve entrar no arquivo docker-compose.yml do seu projeto.

    
por 16.08.2018 / 05:17
0

Então, comecei a trabalhar, primeiro especificando StandardErrorPath e StandardOutPath . Esses registros mostram que houve um erro na minha configuração docker-compose working_dir . Anteriormente, era o PWD do docker, e eu codifiquei-o apenas para / usr / app

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

Meu myjob.plist agora se parece com isso. E isso está funcionando para mim. Espero que isso ajude os outros.

<?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>
    
por 17.08.2018 / 06:21