Я следую за документированием CoreOS Docker, и в нем упоминается запуск контейнеров с такими командами, как:
docker run someImageName /bin/somebinary
Где someImageName
изображение. При выходе из / bin / somebinary образ больше не будет работать.
Я просто хотел бы запустить образ без указания каких-либо исполняемых файлов. Вместо этого я просто хочу запустить службы (например, systemd / sysvinit), которые обычно запускаются внутри образов ОС .
Кажется, это самая распространенная вещь, которую кто-либо когда-либо хотел бы сделать с Docker, но попытка запустить образ без команды возвращает:
2014/02/05 14:49:19 Error: create: No command specified
Как я могу запустить Docker-контейнер и запустить полную ОС, а не указывать команду ?
Ответы:
Как описано здесь, вы просто запускаете
/sbin/init
команду как обычную загрузку Unix из однопользовательского в многопользовательский режим./programming/19332662/start-full-container-in-docker
Контейнеры могут быть полнофункциональными ОС, они просто не должны быть (как и виртуальные машины в этом отношении, просто сложнее в настройке и управлении).
Я бы сказал, что весь смысл Docker состоит в том, чтобы сделать контейнеры приложений простыми, так что вам нужно только настроить приложение, а не всю ОС.
источник
docker ps -notrunc
, чтобы получить идентификатор контейнера, а затемsudo /usr/sbin/lxc-attach -n containerID
перейти к рабочему образу. Как отмечает другой плакат, я на самом деле не нужен второй инициализации, так что я буду проверить одну команду контейнеров рядом ...Docker - это система управления и развертывания контейнеров приложений , а не контейнеров операционной системы . Кажется, что вы совмещаете запуск док-контейнера с загрузкой операционной системы.
Ваши контейнеры Docker должны быть специализированными приложениями с очень узкой областью действия, которые можно запускать с помощью одной команды. Если вы ищете что-то более сложное, чем Docker, то Docker не является решением, которое вы ищете. В этом случае проверьте KVM, ESXi, OpenVZ, LXD и т. Д.
Если вы просто ищете, как вы можете указать значения по умолчанию
CMD
иENTRYPOINT
для ваших контейнеров, вы можете сделать это во время сборки, используя Dockerfile.источник
/sbin/init
, но он не должен иметь его. Скорее всего, вы использовали контейнер Ubuntu по умолчанию или что-то в этом роде. В этих контейнерах есть много битов, которые можно удалить по желанию.Для запуска полной операционной системы в контейнере создайте следующий Dockerfile:
Затем создайте и запустите контейнер и введите оболочку внутри него, чтобы изучить службы, работающие внутри него:
Полный системный сервис внутри контейнера. Прекрасный.
источник
Просто бегите от одного и того же изображения столько раз, сколько необходимо. Будут созданы новые контейнеры, после чего их можно будет запускать и останавливать, сохраняя свою конфигурацию. Для вашего удобства было бы лучше дать каждому вашему контейнеру имя с "--name".
Fi:
Вот и все.
После этого ваши контейнеры создаются навсегда, и вы можете запускать и останавливать их как виртуальные машины.
Чтобы попасть в контейнер и делать то, что вы хотите сделать:
источник