Docker-compose açılışta nasıl çalıştırılır?


20

Bu, Docker çalıştıran bir Ubuntu 14.04 LTS VM'de ve respawnsorunumun sebebi olduğundan şüpheleniyorum ama ideal çözümden emin değilim.

Mevcut başlangıç ​​betiği ( 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

Bu 'çalışır' olan myappcanlı ve duyarlı ancak /sbin/initbirlikte izlediğimde tüm CPU'yu alıyor htop. Eğer girişi upstart ( sudo rm /etc/init/dockersuitecrm.conf) ' dan kaldırırsam ve manuel olarak SSH'yi çalıştırıp çalıştırırsam docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start, cpu'yu% 100 sayısında göremiyorum ve önceki gibi myapptekrar canlı ve duyarlı.

Bu yüzden yukarıda docker-beste yapmaya başladığımın yanlış olduğundan şüpheleniyorum. Başlamak için doğru yol ne docker-composeher zaman manuel müdahale olmadan çalışıyor?

EDIT: Önemli değil /usr/bin/myapp -> /home/batman/dockerapps/myapp, sembolik bir bağlantı.


Çözüm değil, bir çözüm olarak, respawnkomut dosyasında komut olmadan bunu çalıştırabilirim .
DeepSpace101

Aynı soru, ancak şunu gördüm: serverfault.com/questions/615820/… . Sihir kullanıyor docker-compose start.
Mark Lopez

Benzer bir yapılandırmaya sahibim ancak scriptblok kullanmıyorum . Belki de bu sorunun bir parçasıdır. Ben var chdir /usr/bin/myapp/ve bir sonraki satırda exec docker-compose up.
jmreicha

Sadece arka planda docker-compose çalıştırmak istemiyor musunuz? yanidocker-compose up -d
KCD

yeniden başlatma koyma: daima kapsayıcı özelliğinde
Lu32

Yanıtlar:


9

Basitçe crontab kullanın, bir zaman aralığı kullanmak yerine basitçe @reboot deyin

Bu yüzden, bu betiği başlatacak kullanıcı olarak giriş yapın ve komutu yazın.

crontab -e

ve sonra girin

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

Sistemi yeniden başlatın ve çalışıp çalışmadığını kontrol edin. Başlangıcın bir avantajı var, biraz sonra başlatılmış olsa bile, ağ kurma gibi bağımlılıklar hakkında çok fazla endişelenmenize gerek yok.


Yeniden başlatmanın ne kadar temiz olduğu hakkında bir fikrin var mı?
Justin Smith

1
Üzgünüz, ama bu çok iyi bir cevap değil. Zaman zaman işe yarayabilir, ancak diğer liman işçisi gereksinimlerinden önce cron yüklendiğinden, bir yarış koşuluna girersiniz.
Otheus

2

Docker Compose tanımlarının 2. versiyonunu kullandığınızı varsayarak docker-compose.yml, aşağıdakileri yapabilirsiniz:

restart: alwaysÖyle tanımlanması :

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

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


1
Asıl soru, hangi docker'in sitesi cevap vermiyor: “Dock-compose başlatmanın doğru yolu nedir, her zaman manuel müdahale olmadan çalışıyor?”
Otheus

0

Docker hemen hazır değil Komut dosyasını çok erken çalıştırırsanız hiçbir şey olmaz. Docker, docker ps komutuna hazır olduğu anda yanıt vermeye başlayacaktır, böylece bu numarayı crontab'da kullanabilirsiniz:

nano / etc / crontabs / root

@reboot / usr / bin / docker ps && / usr / bin / docker-oluştur -f / prod.yml başlangıç

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.