Я хочу ssh или bash в работающий контейнер Docker. Пожалуйста, посмотрите пример:
$ sudo docker run -d webserver
webserver is clean image from ubuntu:14.04
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
665b4a1e17b6 webserver:latest /bin/bash ... ... 22/tcp, 80/tcp loving_heisenberg
Теперь я хочу получить что-то вроде этого (перейти в запущенный контейнер):
$ sudo docker run -t -i webserver (or maybe 665b4a1e17b6 instead)
$ root@665b4a1e17b6:/#
However when I run the line above I get new CONTAINER ID
$ root@42f1e37bd0e5:/#
Я использовал Vagrant, и я хотел бы получить подобное поведение, как vagrant ssh
.
sudo docker exec -i -t 665b4a1e17b6 /bin/sh
чтобы иметь возможность устанавливать подходящие программы и пакетыsudo docker exec -i -t container-name /bin/bash
это путьОтветы:
Ответ -
attach
команда Докера . Так что для моего примера выше, решение будет:Для Docker версии 1.3 или новее: спасибо пользователю WiR3D, который предложил другой способ получить оболочку контейнера. Если мы используем,
attach
мы можем использовать только один экземпляр оболочки. Поэтому, если мы хотим открыть новый терминал с новым экземпляром оболочки контейнера, нам просто нужно выполнить следующее:или же
источник
sudo docker attach loving_heisenberg
-i -t
равняется-it
docker attach
Например, обращение к экземпляру MongoDB приведет к его уничтожению. Как объяснено более подробно в этом вопросеattach
иexec
разные животные.Начиная с версии Docker 1.3:
По сути, если Docker-контейнер был запущен с помощью
/bin/bash
команды, вы можете получить к нему доступ с помощьюattach
. Если нет, то вам нужно выполнить команду для создания экземпляра Bash внутри контейнера с помощьюexec
.Также, чтобы выйти из Bash, не оставляя Bash в мошенническом процессе:
Да, это так просто.
источник
RUN
команда в файле настройки есть/bin/bash
. Но зависит, что вы имеете в виду. Если вы хотите запустить контейнер и сразу же получить доступ к bash в том же терминале, то запуск с помощью-it
должен сделать этоsudo
vsdocker
group. В любом случае, в Docker встроена дыра в безопасности, которая может предоставить полные привилегии в файловой системе хоста от гостя - независимо от того, используете ли вы группу Docker илиsudo
для запуска контейнера.Хотя автор вопроса специально сказал, что они заинтересованы в работающем контейнере, также стоит отметить, что, если контейнер не запущен, но вы хотите запустить его, вы можете запустить:
docker run -i -t --entrypoint /bin/bash <imageID>
источник
Попробуй это:
Источник: https://docs.docker.com/articles/basics/#running-an-interactive-shell
источник
root@42f1e37bd0e5:/#
и нетroot@665b4a1e17b6:/#
)Основываясь на ответе @ Timur, я создал следующий удобный скрипт
Настроить
Поместите
docker-ssh
файл в ваш$PATH
со следующим содержаниемПримечание : некоторые контейнеры не содержат
bash
, ноash
иsh
т. Д. В этих случаяхbash
должны быть заменены в приведенном выше сценарии.использование
Если у вас есть только один запущенный экземпляр, просто запустите
В противном случае, предоставьте ему параметр идентификатора Docker, который вы получаете
docker ps
(первый столбец)источник
Если ваш контейнер не имеет установленного bash, вы можете попробовать sh:
Или сначала поищите оболочки в / bin:
источник
Я создал контейнерный сервер SSH, который обеспечивает возможности SSH для любого работающего контейнера. Вам не нужно менять свой контейнер. Единственным требованием является наличие в контейнере bash.
Если у вас есть контейнер с именем 'web-server1'. Следующая команда docker run запустит второй контейнер, который предоставит SSH для первого контейнера.
Для получения дополнительных указателей, проверьте https://github.com/jeroenpeeters/docker-ssh
источник
У @jpetazzo есть потрясающий пост на эту тему . Короткий ответ будет использовать
nsenter
:PS: не забудьте проверить обсуждение в комментариях к посту ...
ура
источник
docker exec
более удобно.Вы также можете присвоить контейнеру Docker маршрутизируемый IP-адрес с помощью Pipework, а после этого SSH - в машину с этим новым IP-адресом.
Это будет более «традиционный» (ssh) вместо использования команды, специфичной для конкретного приложения
docker attach
, и в конечном итоге сделает ее более «переносимой» между системами и версиями.источник
Иногда будет полезно иметь возможность использовать ssh в контейнере Docker, особенно во время разработки. Следующее изображение Docker позволяет использовать ssh в контейнере с помощью закрытого ключа:
UbuntuWithSSH-Docker
Суть Dockerfile - это https://gist.github.com/devbkhadka/98792f7bca57f9778793b2db758b3d07 .
источник
Это работает :-)
источник
ВОЙТИ В ПОМЕЩЕНИЕ
установить
goinside
инструмент командной строки с помощью:и войдите в докер-контейнер с правильным размером терминала:
для более подробной информации проверьте это .
источник
Чтобы добавить bash в работающий контейнер, введите:
источник
Просто для информации. Если вам нужно войти в простой контейнер, который не является демоном, вам нужно использовать следующие команды:
источник
если контейнер остановлен, как, например, контейнер только для данных, то хорошим решением будет запуск одноразового контейнера каждый раз, когда вы хотите присоединить его к контейнеру данных. В этом случае сам контейнер данных может быть полностью пустым, так как временный контейнер будет иметь инструменты ОС.
источник