Контейнеры Docker в Mesos Marathon - CommandInfo

Недавно я установил Marathon, Mesos и Docker на нескольких моих узлах. Все работает хорошо, за исключением того, что я столкнулся с проблемой при запуске контейнеров Docker. В частности, когда Marathon выполняет задачу, которая запускает контейнер Docker, marathon добавляет /bin/sh -c ' ' в качестве команды Docker по умолчанию. Это приводит к тому, что мои контейнеры запускаются, а затем немедленно закрываются (я вижу, что они были запущены с помощью docker ps -a)

Я просмотрел документацию Mesos, в которой говорится:

В настоящее время образ докера поддерживает наличие точки входа и / или команды по умолчанию.

Чтобы запустить образ докера с помощью команды по умолчанию (например, образ запуска докера), значение CommandInfo не должно быть установлено. Если значение установлено, оно переопределит команду по умолчанию.

Чтобы запустить образ докеры с определенной точкой входа, параметр оболочки CommandInfo должен иметь значение false. Если для параметра оболочки установлено значение true, Docker Containerizer будет запускать команду пользователя, заключенную в / bin / sh -c, которая также станет параметрами для точки входа в образ.

Это хорошая информация (я вижу ожидаемое поведение от Mesos), но я не вижу в Marathon опции для отключения оболочки CommandInfo.

введите описание изображения здесь

У меня вопрос:

  1. Как установить для параметра оболочки CommandInfo (в Marathon или Mesos) значение false? Где это нужно установить?

Когда я запускаю свой ghost-blog-test образ на машине (используя стандартную команду docker run), он использует /entrypoint.sh npm s в качестве команды по умолчанию. Я бы хотел такого же поведения при использовании Mesos + Marathon.

Заранее спасибо!


person meoww-    schedule 29.11.2015    source источник


Ответы (2)


Вам необходимо определить команду из-за проблемы (# 2147), иначе просто не указав команда должна сделать трюк и запустить точку входа докера по умолчанию.
Связанная ошибка исправлена ​​в последней версии (0.13), но вам нужно использовать API, поскольку в пользовательском интерфейсе все еще есть проблемы (# 2749).

person Orlando Hohmeier    schedule 01.12.2015
comment
Привет, Орландо, спасибо за понимание. Да, отсутствие указания команды вызывает у меня bash -c '' проблему. Однако я могу запустить это из API, и он работает без проблем. Похоже, в пользовательском интерфейсе есть ошибка. - person meoww-; 02.12.2015
comment
Приятно слышать! У нас есть исправление для пользовательского интерфейса в конвейере (# 460), поэтому Скоро вы сможете создавать такие приложения с использованием пользовательского интерфейса. - person Orlando Hohmeier; 03.12.2015

Согласно документации API

cmd (строка)

Команда, которая выполняется. Это значение упаковывается Mesos через / bin / sh -c $ {app.cmd}. Необходимо указать либо cmd, либо args. Недопустимо указывать и cmd, и args в одном приложении.

args (массив строк)

Массив строк, представляющий альтернативный режим указания команды для выполнения. Это было мотивировано безопасным использованием функций контейнеровозов, таких как настраиваемый Docker ENTRYPOINT. Это поле args может использоваться вместо cmd даже при использовании исполнителя команд по умолчанию. Это изменение отражает изменения API и семантики в сообщении protobuf Mesos CommandInfo, начиная с версии 0.20.0. Необходимо указать либо cmd, либо args. Недопустимо указывать и cmd, и args в одном приложении.

person Rico    schedule 30.11.2015