Come eseguire docker-compose all'avvio?


20

Questo è su una VM Ubuntu 14.04 LTS che esegue Docker e sospetto che respawnsia la causa del mio problema ma non sono sicuro della soluzione ideale.

Script upstart corrente ( cat /etc/init/dockersuitecrm.conf)

description "Start docker containers"
author "Batman"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
    docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start
end script

Questo 'funziona' in quanto myappè vivo e reattivo ma /sbin/initoccupa tutta la CPU quando monitoro htop. Se rimuovo la voce da upstart ( sudo rm /etc/init/dockersuitecrm.conf) e inserisco ed eseguo SSH manualmente docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start, non vedo la CPU al 100% e come prima myappè di nuovo viva e reattiva.

Quindi sospetto che il modo in cui sto iniziando con la finestra mobile di cui sopra non sia corretto. Qual è il modo giusto per iniziare docker-composeè sempre in esecuzione senza intervento manuale?

EDIT: non dovrebbe importare ma /usr/bin/myapp -> /home/batman/dockerapps/myappcome collegamento simbolico.


Non una soluzione ma come soluzione, sono in grado di eseguirlo senza il respawncomando nello script.
DeepSpace101

Stessa domanda, ma ho visto questo: serverfault.com/questions/615820/… . La magia sta nell'usare docker-compose start.
Mark Lopez,

Ho una configurazione simile ma non uso un scriptblocco. Forse fa parte del problema? Ho chdir /usr/bin/myapp/e nella riga successiva exec docker-compose upinvece.
jmreicha,

Non vuoi solo eseguire docker-compose in background? vale a diredocker-compose up -d
KCD

put restart: sempre nelle specifiche del contenitore
Lu32

Risposte:


9

Usa semplicemente crontab, invece di usare un intervallo di tempo, dì semplicemente @reboot

Quindi accedi come l'utente che dovrebbe avviare questo script e digitare il comando

crontab -e

e poi entra

@reboot /better/enter/fullpath/here/docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start

Riavvia il sistema e verifica se funziona. C'è un vantaggio rispetto all'avvio, anche se è iniziato un po 'più tardi, non devi preoccuparti molto di dipendenze come la rete, ecc. Per essere già attivo.


Hai idea di quanto sarebbe pulito un riavvio in questo modo?
Justin Smith,

1
Siamo spiacenti, ma questa non è un'ottima risposta. Di tanto in tanto potrebbe funzionare, ma poiché cron potrebbe essere caricato prima di altri requisiti della finestra mobile, si verifica una condizione di competizione.
Otheus,

2

Supponendo che tu stia utilizzando la versione 2 delle definizioni di Docker Compose in te docker-compose.yml, puoi fare quanto segue:

Definire restart: alwayscosì:

version: '2'
services:
  web:
    image: nginx
    restart: always

Riferimento: https://docs.docker.com/compose/compose-file/compose-file-v2/


1
La domanda è: quale sito docker non risponde, è stato: "Qual è il modo giusto per avviare docker-compose è sempre in esecuzione senza intervento manuale?"
Otheus,

0

Docker non è pronto immediatamente Se si esegue lo script troppo presto, non accadrà nulla. La finestra mobile inizierà a rispondere al comando ps finestra mobile non appena sarà pronta, quindi puoi usare questo trucco in crontab:

nano / etc / crontabs / root

@reboot / usr / bin / docker ps && / usr / bin / docker-compose -f /prod.yml start

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.