Запустить полный контейнер в Docker?

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

Я ожидал, что

docker run -t -i ubuntu /sbin/init

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

lxc-start -n ubuntu /sbin/init

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


person Epeli    schedule 12.10.2013    source источник


Ответы (2)


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

person blalor    schedule 20.11.2013
comment
Мое программное обеспечение Docker (версия 19.03.6), работающее на хосте Ubuntu 18.04.4 (и работающее с образом/контейнером Ubuntu), кажется, восстает против этого маневра, оканчивающегося на Freezing execution.. Может быть, это связано с тем, что современный Docker (нам уже 6 с лишним лет после публикации выше) не одобряет такое /sbin/init поведение? Как новичок в Docker, я могу только догадываться. - person Johnny Utahh; 18.03.2020
comment
nspawn и podman легче иметь Systemd внутри контейнера, podman использует те же команды, что и docker, поэтому не нужно учиться - person Badr Elmers; 02.10.2020

Вы можете использовать образ 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 в более поздних выпусках. Поиск в Google показывает, что работа над тем, чтобы заставить systemd работать в док-контейнере, не требуя повышенных привилегий, продолжается, но, похоже, он не совсем готов к прайм-тайму. Надеюсь, он будет готов, когда 16.04 станет LTS.

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

person NeilenMarais    schedule 05.02.2016
comment
У вас есть ссылка на амортизацию этого решения? - person brujoand; 19.04.2016
comment
@brujoand Он устарел в том смысле, что ubuntu перешла на использование systemd, поэтому работа, проделанная для запуска upstart в контейнере докеров, не будет полезна для версий ubuntu после 14.10. - person NeilenMarais; 26.04.2016
comment
Мой текущий клиент (на момент написания) использует 14.04 и, похоже, не планирует обновляться до окончания официальной поддержки, поэтому для меня он не устарел! - person Asfand Qazi; 28.12.2017