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.