Подтвердить что ты не робот

Запустить контейнер Docker, используя активацию сокета systemd?

Можно ли запустить отдельный контейнер Docker, например веб-сервер, который выставляет (прослушивает) порт, используя функцию systemd сокет активации? Идея состоит в том, чтобы сэкономить ресурсы, запустив контейнер только тогда, когда он действительно необходим в первый раз (и, возможно, снова остановит его при простоя для экономии ресурсов).

Примечание. Этот вопрос связан не с запуском самого демона Docker с использованием активации сокета (который уже поддерживается ), но и для запуска отдельных контейнеров по требованию.

4b9b3361

Ответ 1

Короче говоря, вы не можете.

Но если вы хотите подойти к решению, вам сначала нужно запустить инструмент, например CoreOS или geard, который запускает каждый контейнер Docker в службе systemd.

Даже тогда поддержка Docker для наследования сокета пришла и ушла. Я знаю, что geard работает над стабильной поддержкой. CoreOS опубликовал обобщенную поддержку активации сокета в Go. Люди Red Hat также добавили в связанные патчи к пакетам Fedora Docker, которые используют библиотеку активации Go-сокета и улучшают "режим переднего плана" - ключевой компонент для его работы.

(Я - Дэвид Штраус из Lennart ранняя статья о активации сокетов контейнеров, и эта тема меня очень интересует. Я отправил по электронной почте автора патча в Red Hat и связался с командой geard. Я постараюсь, чтобы этот ответ был обновлен.)

Ответ 2

Если он должен использовать systemd, в прошлом месяце было сообщение в блоге, здесь (еще не пробовал сам).

Если выбор технологии не является жестким ограничением, вы можете просто написать небольшой прокси на своем любимом языке программирования и просто сделать вызов API Docker для обеспечения запуска контейнера. То, что делает snickers (мой экспериментальный узел nodejs), делает это.