запуск докерного контейнера с помощью systemd - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть определение службы, которая запускает Docker-контейнер с помощью systemd в CentOS 7:

[Unit]
Description=MappingService
After=portal.service
Requires=docker.service

[Service]
TimeoutStartSec=3000
Type=forking
WorkingDirectory=/home/user/Downloads/MS_0.3.4_artifact
ExecStartPre=-/bin/docker rm -f eb-mapping-service-container
ExecStartPre=/home/user/Downloads/MS_0.3.4_artifact/deploy.sh /home/user/Downloads/MS_0.3.4_artifact/eb-mapping-service.tgz
ExecStartPre=/bin/docker run -v /dev/log:/dev/log -d -ti --log-driver=journald --network=bridge -p 9090:9090 --name eb-mapping-service-container eb-mapping-service  /bin/bash -c "cd /build/MappingService; ./start_multiple_clients_mapping_service.sh"
ExecStart=/bin/docker start -a eb-mapping-service-container
ExecStop=/bin/docker stop eb-mapping-service-container

[Install]
WantedBy=multi-user.target

Эта служба работает.Контейнер Docker запускается.Всякий раз, когда я загружаю компьютер, он работает.Моя проблема с этим сервисом заключается в том, что он никогда не достигает статуса Активный (Работает).Вместо этого он застревает в состоянии «Активация (запуск)».Сценарий 'start_multiple_clients_mapping_service.sh' запускает сервер node.js и начинает прослушивание, поэтому он не выходит напрямую.

Я искал везде и искал документацию Докера по этому поводу и не смог найти ответ.

Кроме того, если я удалю '-a' из команды запуска докера, то статус будет Неактивен (мертв), даже если контейнер будет запущен и работает.Обновление: через некоторое время у меня нет точного номера, служба перестает работать по причине тайм-аута.Это не через 3000 секунд, а намного раньше. Хотя обслуживание не удалось, докер все еще находится в эфире и может использоваться .
Я подтвердил с помощью docker container ls

Вопрос:
Как сделатьЯ изменил свое определение сервиса, чтобы отразить активный (работающий) статус для докера?

1 Ответ

0 голосов
/ 19 февраля 2019

Я понял проблему.Было несколько ошибок:

  1. команда docker run не должна использоваться с флагами -d и -ti.
  2. Тип должен быть установлен как exec вместо разветвления.

После этих двух изменений я получил очень востребованный статус Активный (Работающий) с успешно запущенным Docker.

...