Начать полный контейнер в Docker?

В соответствии с этой проблемой github должно быть возможно запустить полный контейнер с Upstart, cron и т.д. с Docker 0.6 или новее, но как это сделать?

Я ожидал, что

docker run -t -i ubuntu /sbin/init

будет работать так же, как

lxc-start -n ubuntu /sbin/init

и я бы получил экран входа в систему, но вместо этого он ничего не отображает. Я также пытался получить доступ к нему с помощью ssh, но не повезло. Я использую изображение ubuntu по умолчанию из индекса Docker.

Ответ 1

docker run ubuntu /sbin/init похоже, работает безупречно для меня с 0.6.6. Вы не получите экран входа в систему, потому что Docker управляет только процессом. Вместо этого вы можете использовать docker ps -notrunc, чтобы получить полный идентификатор контейнера lxc, а затем использовать lxc-attach -n <container_id> run bash в этом контейнере как root. sshd не установлен в контейнере, поэтому вы не можете ssh к нему.

Ответ 2

Вы можете использовать изображение ubuntu-upstart:

docker run -t -i ubuntu-upstart:14.04 /sbin/init

Несмотря на то, что это решение, к сожалению, устарело, оно достаточно хорошо, если вам нужен полный контейнер ОС, который сегодня "управляет" как обычная Ubuntu 12.04, 14.04 или 14.10 (изменение: 14.04 бит). Если версия не указана, по умолчанию она равна 14.04. Я не использовал его сильно, и у меня возникли проблемы с установкой более сложных пакетов (например, dbus!), Но это может сработать для вас.

Увы, Ubuntu переключился на systemd в более поздних версиях. Googling показывает, что, похоже, продолжается работа, чтобы сделать работу systemd в контейнере докеров, не требуя повышенных привилегий, но, похоже, она не готова к прайм-тайму. Надеюсь, он будет готов, когда 16.04 станет LTS.

Другим вариантом является, конечно, использование phusion/baseimage, но у него есть собственный подход для запуска сервисов. Кажется, что он лучше подходит для минимальных контейнеров с несколькими процессами.