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

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

lxc create -t ubuntu -n my_container

lxc-start -n my_container -d

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

4 ответов


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

однако, я думаю, это не будет хорошо для вас.

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

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


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

В Dockerfile

CMD ["sleep","3600"]

для входа в запущенный экземпляр Docker

docker exec -i -t <Container ID> bash

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

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


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

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

blong@mycomputer:~$ docker run --name ubuntuContainer1 -itd ubuntu 
2ce602710fb9b84b6530e5a1072961627e91731aba8f8b019f346fc78df08d7c
blong@mycomputer:~$ docker run --name ubuntuContainer2 -itd ubuntu 
e32b0eb72456fc23222f3915c91afc77e06a7e37a073b11f7088fabe8fa4bf20
blong@mycomputer:~$ docker run --name ubuntuContainer3 -itd ubuntu 
40574f704dceb0378f48ebe01d014d598434093d649be13573911d9833d9825d

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

blong@mycomputer:~$ 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

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

blong@mycomputer:~$ docker attach ubuntuContainer1
root@2ce602710fb9:/# 

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

root@2ce602710fb9:/# apt-get update

# ... omitting output

root@2ce602710fb9:/# 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) ...
root@2ce602710fb9:/# nodejs --version
v0.10.25

после этого, я могу выйти, и держать все работает нажав CTRL-п сочетание клавиш Ctrl-Q и

root@2ce602710fb9:/# blong@mycomputer:~/$ 
blong@mycomputer:~/$ 

Читайте также: