Запуск контейнера с 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:~/$
Читайте также: