Запустить контейнер с Docker без указания команды

Я знаком с LXC и хотел попробовать докер. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти способ просто сказать, что докер запускает контейнер в фоновом режиме, не выполняя команду. Например, с LXC я бы сделал:

lxc create -t ubuntu -n my_container

lxc-start -n my_container -d

В этот момент у меня будет запущенный контейнер, который я могу использовать как любую виртуальную машину (ssh к ней, установить в нее вещи...) Кажется, что докер предотвращает такое использование. Я что-то пропустил?

Ответ 1

С докере из CLI вы не можете создать контейнер без выполнения команды на нем. Если вы хотите использовать REST Api, вы можете вызывать конечную точку "create" без "start".

Однако, я думаю, это не принесет вам пользы.

В большинстве случаев вы, вероятно, просто хотите запустить контейнер с bash docker run -t -i ubuntu bash и сделать там что-нибудь. После того, как вы сделали все, что вам было нужно, вы можете просто совершить и запустить с этого момента.

Обычно, однако, лучше сделать один шаг за раз, чтобы сохранить четкую историю. Взгляните на конструктор Docker:)

Ответ 2

Когда мне нужно проверить контейнер-докер, который я создал, который имеет проблемы с нормальной CMD в файле Docker, я прокомментирую эту команду и заменил командой "sleep", чтобы просто приостановить контейнер, когда он начнется, поэтому я может войти в систему и проверить установку.

В Dockerfile

CMD ["sleep","3600"]

Чтобы войти в исполняемый экземпляр Docker

docker exec -i -t <Container ID> bash

Ответ 3

Вы можете создать образ Docker, включающий команду запуска и другую конфигурацию, чтобы docker run <image> запустил контейнер. Самый простой способ сделать это - CMD из Docker Builder. Вам понадобится последняя версия Docker ( > 0.4.6?).

Вне использования Docker Builder проверьте флаги для docker commit и docker run (где аргументы команды являются необязательными).

Ответ 4

Добавляя еще несколько мыслей, я сам играл с этим.

Скажем, я хочу работать с 3 контейнерами докеров:

[email protected]:~$ docker run --name ubuntuContainer1 -itd ubuntu 
2ce602710fb9b84b6530e5a1072961627e91731aba8f8b019f346fc78df08d7c
[email protected]:~$ docker run --name ubuntuContainer2 -itd ubuntu 
e32b0eb72456fc23222f3915c91afc77e06a7e37a073b11f7088fabe8fa4bf20
[email protected]:~$ docker run --name ubuntuContainer3 -itd ubuntu 
40574f704dceb0378f48ebe01d014d598434093d649be13573911d9833d9825d

Посмотрите, что они продолжают работать, хотя я не просил запускать /bin/ bash явно

[email protected]:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
40574f704dce        ubuntu              "/bin/bash"         2 seconds ago       Up 1 seconds                            ubuntuContainer3
e32b0eb72456        ubuntu              "/bin/bash"         5 seconds ago       Up 4 seconds                            ubuntuContainer2
2ce602710fb9        ubuntu              "/bin/bash"         8 seconds ago       Up 7 seconds                            ubuntuContainer1

Я могу скопировать в контейнеры

[email protected]:~$ docker attach ubuntuContainer1
[email protected]:/# 

Я могу выполнять команды (например, устанавливать пакеты) в контейнере

[email protected]:/# apt-get update

# ... omitting output

[email protected]:/# apt-get install nodejs
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libc-ares2 libv8-3.14.5
The following NEW packages will be installed:
  libc-ares2 libv8-3.14.5 nodejs
0 upgraded, 3 newly installed, 0 to remove and 5 not upgraded.
Need to get 1912 kB of archives.
After this operation, 7538 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y

# ... omitting output

Processing triggers for libc-bin (2.19-0ubuntu6.6) ...
[email protected]:/# nodejs --version
v0.10.25

Затем я могу выйти и сохранить все, нажав CTRL-p CTRL-q

[email protected]:/# [email protected]:~/$ 
[email protected]:~/$ 

См. также: