2013-06-30 2 views
10

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

lxc create -t ubuntu -n my_container

lxc-start -n my_container -d

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

ответ

8

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

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

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

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

+0

Спасибо! Они должны иметь сильный подъем на «контейнеризованной» ОС! запуск команды 'ps -ef' внутри контейнера выводит только тот процесс, который я запускаю. Любая идея, как они это достигли? – rmonjo

+0

Это пространство имен PID. – creack

2

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

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

+1

аргументы команды действительно являются необязательными в соответствии с документом, однако 'docker run -d b750fe79269d' жалуется на« никакая команда не указана » – rmonjo

+1

@rmonjo вы получаете эту ошибку, когда CMD не указан в файле Docker. Просто добавьте в конец 'docker run' то, что вы хотите запустить внутри контейнера. например bash –

8

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

В Dockerfile

CMD ["sleep","3600"] 

Чтобы войти в запущенное Докер например

docker exec -i -t <Container ID> bash 
0

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

Скажем, я хочу работать с 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/Баш явно

[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 

I может входить в контейнеры

[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]fb9:/# nodejs --version 
v0.10.25 

После этого, я могу выйти и сохранить все работает, нажав CTRL-P CTRL-Q

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

Смотрите также:

Смежные вопросы