Bagaimana menjalankan komposisi buruh pelabuhan saat bootup?

20

Ini ada pada Ubuntu 14.04 LTS VM yang menjalankan Docker dan saya curiga respawnpenyebab masalah saya tapi tidak yakin dengan solusi yang ideal.

Skrip pemula baru saat ini ( 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

Ini 'bekerja' dalam keadaan myapphidup dan responsif tetapi /sbin/initmemakan semua CPU ketika saya monitor dengan htop. Jika saya menghapus entri dari pemula ( sudo rm /etc/init/dockersuitecrm.conf) dan secara manual SSH masuk dan menjalankan docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp startsaya tidak melihat cpu pada masalah 100% dan seperti sebelumnya myapplagi hidup dan responsif.

Jadi saya curiga cara saya memulai docker-compose di atas salah. Apa cara yang benar untuk memulai docker-composeselalu berjalan tanpa intervensi manual?

EDIT: Seharusnya tidak masalah tetapi /usr/bin/myapp -> /home/batman/dockerapps/myappsebagai tautan simbolis.

DeepSpace101
sumber
Bukan solusi tetapi sebagai solusi, saya dapat menjalankan ini tanpa respawnperintah dalam skrip.
DeepSpace101
Pertanyaan yang sama, tapi saya melihat ini: serverfault.com/questions/615820/... . Keajaibannya adalah dengan menggunakan docker-compose start.
Mark Lopez
Saya memiliki konfigurasi yang serupa tetapi tidak menggunakan scriptblok. Mungkin itu bagian dari masalahnya? Saya memiliki chdir /usr/bin/myapp/dan pada baris berikutnya exec docker-compose upsebagai gantinya.
jmreicha
Bukankah Anda hanya ingin menjalankan komposisi buruh pelabuhan di latar belakang? yaitudocker-compose up -d
KCD
menempatkan restart: selalu dalam spesifikasi wadah
Lu32

Jawaban:

9

Cukup gunakan crontab, alih-alih menggunakan intervall waktu cukup ucapkan @reboot

Jadi login sebagai pengguna yang harus memulai skrip ini dan ketik perintah

crontab -e

lalu masuk

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

Nyalakan ulang sistem dan lihat apakah itu berfungsi. Ada satu keuntungan dari pemula, meskipun dimulai sedikit kemudian, Anda tidak perlu terlalu khawatir tentang ketergantungan seperti jaringan, dll.

s1mmel
sumber
Adakah gagasan betapa bersihnya reboot akan menjalankannya dengan cara ini?
Justin Smith
1
Maaf, tapi ini bukan jawaban yang sangat bagus. Ini mungkin bekerja dari waktu ke waktu, tetapi karena cron mungkin dimuat sebelum persyaratan buruh pelabuhan lainnya, Anda mengalami kondisi balapan.
Otheus
2

Dengan anggapan Anda menggunakan definisi Docker Compose definisi 2 di dalam diri Anda docker-compose.yml, Anda dapat melakukan hal berikut:

Mendefinisikan restart: alwaysseperti itu:

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

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

Sergei Filippov
sumber
1
Pertanyaannya adalah, situs mana buruh pelabuhan tidak menjawab, adalah: "Apa cara yang tepat untuk memulai menulis buruh pelabuhan selalu berjalan tanpa intervensi manual?"
Otheus
0

Docker tidak siap segera Jika Anda menjalankan skrip terlalu dini, tidak ada yang akan terjadi. Docker akan mulai merespons perintah docker ps segera setelah siap sehingga Anda dapat menggunakan trik ini di crontab:

nano / etc / crontab / root

@reboot / usr / bin / buruh pelabuhan ps && / usr / bin / buruh-menulis -f /prod.yml mulai

Evgeny Savelov
sumber