Запустить контейнер Docker, используя активацию сокета systemd?
Можно ли запустить отдельный контейнер Docker, например веб-сервер, который выставляет (прослушивает) порт, используя функцию systemd сокет активации? Идея состоит в том, чтобы сэкономить ресурсы, запустив контейнер только тогда, когда он действительно необходим в первый раз (и, возможно, снова остановит его при простоя для экономии ресурсов).
Примечание. Этот вопрос связан не с запуском самого демона Docker с использованием активации сокета (который уже поддерживается ), но и для запуска отдельных контейнеров по требованию.
Ответы
Ответ 1
Короче говоря, вы не можете.
Но если вы хотите подойти к решению, вам сначала нужно запустить инструмент, например CoreOS или geard, который запускает каждый контейнер Docker в службе systemd.
Даже тогда поддержка Docker для наследования сокета пришла и ушла. Я знаю, что geard работает над стабильной поддержкой. CoreOS опубликовал обобщенную поддержку активации сокета в Go. Люди Red Hat также добавили в связанные патчи к пакетам Fedora Docker, которые используют библиотеку активации Go-сокета и улучшают "режим переднего плана" - ключевой компонент для его работы.
(Я - Дэвид Штраус из Lennart ранняя статья о активации сокетов контейнеров, и эта тема меня очень интересует. Я отправил по электронной почте автора патча в Red Hat и связался с командой geard. Я постараюсь, чтобы этот ответ был обновлен.)
Ответ 2
Если он должен использовать systemd, в прошлом месяце было сообщение в блоге, здесь (еще не пробовал сам).
Если выбор технологии не является жестким ограничением, вы можете просто написать небольшой прокси на своем любимом языке программирования и просто сделать вызов API Docker для обеспечения запуска контейнера. То, что делает snickers (мой экспериментальный узел nodejs), делает это.