Это на виртуальной машине Ubuntu 14.04 LTS с Docker, и я подозреваю, что это respawn
является причиной моей проблемы, но я не уверен в идеальном решении.
Текущий сценарий upstart ( 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 выше неверен. Какой правильный способ запуска docker-compose
всегда работает без ручного вмешательства?
РЕДАКТИРОВАТЬ: не должно иметь значения, но /usr/bin/myapp -> /home/batman/dockerapps/myapp
как символическая ссылка.
respawn
команды в сценарии.docker-compose start
.script
блок. Может быть, это является частью проблемы? У меня естьchdir /usr/bin/myapp/
и на следующей строкеexec docker-compose up
вместо.docker-compose up -d
Ответы:
Просто используйте crontab, вместо того, чтобы использовать интервал времени, просто скажите @reboot
Так войдите как пользователь, который должен запустить этот скрипт и введите команду
а затем введите
Перезагрузите систему и посмотрите, работает ли она. Есть одно преимущество перед выскочкой, даже если это началось немного позже, вам не нужно сильно беспокоиться о таких зависимостях, как работа в сети и т. Д., Чтобы уже быть в курсе.
источник
Предполагая, что вы используете версии 2 определений Docker Compose
docker-compose.yml
, вы можете сделать следующее:Определяя
restart: always
так:Ссылка: https://docs.docker.com/compose/compose-file/compose-file-v2/
источник
Docker не готов немедленно. Если вы запустите скрипт слишком рано, ничего не произойдет. Докер начнет отвечать на команду docker ps, как только она будет готова, так что вы можете использовать этот трюк в crontab:
nano / etc / crontabs / root
@reboot / usr / bin / docker ps && / usr / bin / docker-compose -f /prod.yml start
источник