1. Чтобы при перезапуске машины контейнеры сами стартовали, нужно всего лишь соответствующий systemd service сделать enabled. Cron здесь не нужен.
sudo systemctl enable docker-project.service
2. Любой systemd service - это всего лишь абстракция. А что именно он выполняет - решать именно Вам. Что у Вас
ExecStart
'ом будет стартовать один контейнер через
docker run
, что связка контейнеров через
docker-compose up
, для systemd и CoreOS принципиальной разницы нет.
3. В приведенной Вами декларации systemd service'а в секции
[Unit]
есть следующие строки:
Requires=docker-project.service
After=docker-project.service
Они означают, что декларируемый Вами service должен быть запущен только после того, как был запущен
docker-project.service
. Но, насколько я понимаю из Вашего описания, это и есть декларация
docker-project.service
. То есть Вы говорите systemd что сервис должен быть запущен после запуска самого себя. Это не есть гуд. Эти строки, судя по всему, должны быть такими:
Requires=docker.service
After=docker.service
Дабы systemd пытался запустить этот сервис только после того, как будет запущен Docker daemon.
4. В файлике
docker-up.sh
у Вас
docker-compose up
запускается в foreground'е. Первая связка контейнеров то запустится, а что со второй - не понятно. Наверное, все же стоило их запускать с
-d
ключиком, а в systemd декларации в секции
[Service]
указать
Type=forking
, если прям так нужно обе связки контейнеров запускать одним systemd service. Но вообще, имхо, на каждый
docker-compose.yml
должен быть свой отдельный systemd service, и никаких
forking
.
Также, заворачивать
docker-compose
команды внутрь
docker-up.sh
было не самой хорошей идеей. Вам ничего не мешало написать несколько
ExecStart
'ов подряд, тем самым не размазывая декларацию по нескольким файлам, и было бы видно на каком именно шаге оно отваливается при
systemctl start docker-project.service
.
5. Логи наше все. Используйте
journalctl --unit=docker-project.service
дабы глянуть что там вообще произошло, и кто на кого ругается.
В заключение:
Вообще, честно говоря, видно полное профанство с Вашей стороны по данному вопросу. Это нормально, ведь невозможно знать все технологии и инструменты, и постоянно приходится что-то изучать. Не нормально то, что ничего не мешает заглянуть в официальную документацию по тому же systemd. 20-30 минут чтения хотя бы
этой страницы, и подобного непонимания бы просто не было.
Пожалуйста, не поленитесь, потратьте немного времени и почитайте доки. Systemd умеет ещё много чего, что сможет Вам помочь в решении Ваших задач, и даст понимание что, куда, и как.
К размышлению:
Раз уж Вы используете CoreOS, посмотрите в сторону Kubernetes для запуска сервисов/контейнеров. Ставится на CoreOS он в пол-оборота, а возможностей, гибкости и вкусных абстракций уж гораздо поболее, нежели у systemd/fleet.