Jak uruchomić komponowanie dokera podczas uruchamiania?

20

To jest na maszynie Wirtualnej Ubuntu 14.04 LTS z uruchomionym Dockerem i podejrzewam, że respawnjest to przyczyną mojego problemu, ale nie jestem pewien idealnego rozwiązania.

Bieżący skrypt wstępny ( 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

To „działa”, ponieważ myappjest żywe i responsywne, ale /sbin/initzajmuje cały procesor, gdy monitoruję htop. Jeśli usunę wpis z upstart ( sudo rm /etc/init/dockersuitecrm.conf) i ręcznie SSH w i uruchom docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start, nie widzę procesora w 100% problem i jak poprzednio myappjest ponownie żywy i responsywny.

Podejrzewam więc, że sposób, w jaki zaczynam powyżej kompilację dokera, jest nieprawidłowy. Jaki jest właściwy sposób, aby rozpocząć docker-composezawsze działa bez ręcznej interwencji?

EDYCJA: Nie powinno mieć znaczenia, ale /usr/bin/myapp -> /home/batman/dockerapps/myappjako symboliczny link.

DeepSpace101
źródło
Nie rozwiązanie, ale jako obejście problemu, jestem w stanie uruchomić to bez respawnpolecenia w skrypcie.
DeepSpace101
To samo pytanie, ale widziałem to: serverfault.com/questions/615820/... . Magia polega na użyciu docker-compose start.
Mark Lopez,
Mam podobną konfigurację, ale nie używam scriptbloku. Może to część problemu? Zamiast tego mam chdir /usr/bin/myapp/i w następnym wierszu exec docker-compose up.
jmreicha
Nie chcesz po prostu uruchamiać kompilatora dokerów w tle? tj.docker-compose up -d
KCD
umieść restart: zawsze w specyfikacji kontenera
Lu32

Odpowiedzi:

9

Po prostu użyj crontab, zamiast interwału czasowego, po prostu powiedz @reboot

Zaloguj się jako użytkownik, który powinien uruchomić ten skrypt i wpisz polecenie

crontab -e

a następnie wprowadź

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

Uruchom ponownie system i sprawdź, czy działa. Jest jedna zaleta w stosunku do upstart, nawet jeśli jest ona uruchomiona nieco później, nie musisz się martwić o zależności, takie jak sieci itp., Aby być już gotowym.

s1mmel
źródło
Wiesz, jak czysty byłby restart systemu w ten sposób?
Justin Smith,
1
Przepraszamy, ale nie jest to dobra odpowiedź. Może to działać od czasu do czasu, ale ponieważ cron może zostać załadowany przed innymi wymaganiami dokera, możesz spotkać się z wyścigiem.
Otheus,
2

Zakładając, że korzystasz z wersji 2 definicji Docker Compose docker-compose.yml, możesz wykonać następujące czynności:

Tak zdefiniowane restart: always:

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

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

Siergiej Filippow
źródło
1
Pytanie, na którą stronę dokera nie odpowiada, brzmiało: „Jaki jest właściwy sposób, aby rozpocząć kompilowanie dokerów zawsze działa bez ręcznej interwencji?”
Otheus,
0

Docker nie jest gotowy natychmiast Jeśli uruchomisz skrypt zbyt wcześnie, nic się nie stanie. Okno dokowane zacznie odpowiadać na polecenie dokera ps, gdy tylko będzie gotowe, aby można było użyć tej sztuczki w crontab:

nano / etc / crontabs / root

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

Jewgienij Sawelow
źródło