Як запустити docker-compose під час завантаження?


20

Це на Ubuntu 14.04 LTS VM під керуванням Docker, і я підозрюю, що respawnє причиною моєї проблеми, але не впевнений у ідеальному вирішенні.

Поточний сценарій запуску ( 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

Це "працює" в тому, що myappживе і чуйним, але /sbin/initзаймає весь процесор, коли я монітору htop. Якщо я видаляю запис з upstart ( sudo rm /etc/init/dockersuitecrm.conf) і вручну запускаю SSH, docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp startя не бачу процесора на 100% випуску і, як і раніше myapp, знову живий і чуйний.

Тож я підозрюю, що я починаю докер-композицію вище неправильним. Який правильний спосіб почати docker-composeзавжди працює без ручного втручання?

EDIT: Має значення не /usr/bin/myapp -> /home/batman/dockerapps/myappяк символічне посилання.


Не як рішення, але як обхід, я можу запустити це без respawnкоманди в сценарії.
DeepSpace101

Те саме питання, але я бачив таке: serverfault.com/questions/615820/… . Магія з використанням docker-compose start.
Марк Лопес

У мене схожа конфігурація, але не використовуйте scriptблок. Можливо, це частина проблеми? Я маю chdir /usr/bin/myapp/і на наступному рядку exec docker-compose upзамість цього.
jmreicha

Ви не хочете просто запускати докер-композицію на задньому плані? тобтоdocker-compose up -d
KCD

поставити перезапуск: завжди в специфікації контейнера
Lu32

Відповіді:


9

Просто використовуйте crontab, а не за допомогою інтервалу часу просто скажіть @reboot

Тому увійдіть як користувач, який повинен запустити цей скрипт і введіть команду

crontab -e

а потім увійдіть

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

Перезавантажте систему і подивіться, чи працює вона. Є одна перевага перед початком роботи, навіть якщо це запускається трохи пізніше, вам не доведеться сильно турбуватися про залежність, наприклад, мережу тощо.


Будь-яка ідея, наскільки чистим буде перезавантаження, виконується саме так?
Джастін Сміт

1
Вибачте, але це не дуже гарна відповідь. Це може спрацьовувати час від часу, але оскільки крон може бути завантажений перед іншими вимогами докера, ви стикаєтеся з перегоном.
Отей

2

Припустимо, що ви використовуєте версію 2 визначень Docker Compose у собі docker-compose.yml, ви можете зробити наступне:

Визначаючи restart: alwaysтак:

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

Довідка: https://docs.docker.com/compose/compose-file/compose-file-v2/


1
Питання, на який сайт докера не відповідає, було: "Який правильний спосіб запуску докер-композиції завжди працює без ручного втручання?"
Отей

0

Докер не готовий негайно. Якщо запустити сценарій занадто рано, нічого не станеться. Докер почне реагувати на команду docker ps, як тільки вона буде готова, щоб ви могли використовувати цей трюк у crontab:

nano / etc / crontabs / root

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.