Я начинаю работать с Докером. Я использую базовый образ WordPress и docker-compose.
Я пытаюсь ssh в один из контейнеров для проверки файлов / каталогов, которые были созданы во время первоначальной сборки. Я пытался бежать docker-compose run containername ls -la
, но это ничего не делало. Даже если бы это было так, я бы предпочел консоль, где я мог бы просматривать структуру каталогов, а не запускать одну команду. Как правильно сделать это с Docker?
docker
docker-container
Эндрю
источник
источник
docker exec
askubuntu.com/a/543057/35816 . Получить идентификатор контейнера с помощьюdocker ps
sudo docker run -it --entrypoint /bin/bash <container_name>
доставит вас в контейнер в интерактивном режиме. Затем можно проверить файловую систему в контейнере с помощьюcd <path>
Ответы:
docker attach
позволит вам подключиться к вашему контейнеру Docker, но это не совсем то же самое, что иssh
. Например, если в вашем контейнере запущен веб-сервер, он,docker attach
вероятно, подключит вас к стандартному выводу процесса веб-сервера. Это не обязательно даст вам оболочку.Команда,
docker exec
вероятно, то, что вы ищете; это позволит вам запускать произвольные команды внутри существующего контейнера. Например:Конечно, любая команда, которую вы запускаете, должна существовать в файловой системе контейнера.
В приведенной выше команде
<mycontainer>
указывается имя или идентификатор целевого контейнера. Неважно, используете ли вы или нетdocker compose
; просто запуститеdocker ps
и используйте либо идентификатор (шестнадцатеричная строка, отображаемая в первом столбце), либо имя (отображаемое в последнем столбце). Например, учитывая:Я могу бегать:
Я мог бы сделать то же самое, запустив:
Точно так же я мог запустить оболочку в контейнере;
источник
docker exec
работает только на работающие контейнеры (в противном случае использоватьdocker run -it --entrypoint /bin/bash
или аналогичные).-it
это комбинация-i
и-t
которая--interactive
(«Держите STDIN открытым, даже если он не подключен») соответственно--tty
(«Выделить псевдо-TTY»).docker run -it --entrypoint /bin/bash <imageid> --any --more --args
, просто чтобы прояснить для людей--any --more --args
вас есть, будут добавлены в то, что изображение определено как его,CMD
а не как Docker (или если ваше изображение определяет только «ENTRYPOINT
нет» и «нет»)CMD
, то эти параметры будут введены так,/bin/bash
как вы указали здесь. ). Так, например, любые другиеdocker run
варианты (например--net "host"
) должны идти перед<imageid>
.Чтобы добавить bash в работающий контейнер, введите:
или
или
источник
docker exec -it
вместоdocker exec -t -i
Допустим, по вашим собственным причинам вы действительно хотите использовать SSH. Требуется несколько шагов, но это может быть сделано. Вот команды, которые вы запускаете внутри контейнера для его настройки ...
Теперь вы даже можете запускать графические приложения (если они установлены в контейнере), используя пересылку X11 клиенту SSH:
Вот некоторые связанные ресурсы:
источник
Если вы ищете ответ, специфичный для Docker Compose, как я, он предоставляет простой способ без необходимости искать сгенерированный идентификатор контейнера.
docker-compose exec
принимает имя службы в соответствии с вашимdocker-compose.yml
файлом.Итак, чтобы получить оболочку Bash для вашего «веб-сервиса», вы можете сделать:
источник
docker-compose run
работает также, если ваш контейнер еще не существует.Обратите внимание : этот ответ поддерживает инструмент, который я написал.
Я создал контейнерный SSH-сервер, который можно «привязать» к любому работающему контейнеру. Таким образом, вы можете создавать композиции с каждым контейнером. Единственным требованием является наличие в контейнере Bash.
В следующем примере запускается SSH-сервер, подключенный к контейнеру с именем «my-container».
Когда вы подключаетесь к этой службе SSH (с вашим выбранным SSH-клиентом), сеанс Bash будет запущен в контейнере с именем «my-container».
Для получения дополнительных указателей и документации см .: https://github.com/jeroenpeeters/docker-ssh
источник
less
показывал предупреждение каждый раз, когда я запускаю его и т. Д. Использование контейнера Jeroen дает мне гораздо лучший опыт. Просто обязательно ознакомьтесь с документацией . Пример команды в ответе больше не действителен.Если вы используете Docker в Windows и хотите получить доступ оболочки к контейнеру, используйте это:
Скорее всего, у вас уже установлен Git Bash . Если вы этого не сделаете, обязательно установите его.
источник
Если контейнер уже вышел (возможно, из-за какой-то ошибки), вы можете сделать
или
или
создать новый контейнер и вставить в него оболочку. Поскольку вы указали --rm, контейнер будет удален при выходе из оболочки.
источник
В некоторых случаях ваше изображение может быть альпийским. В этом случае он бросит:
Потому
/bin/bash
что не существует. Вместо этого вы должны использовать:или
источник
SSH в Docker-контейнер с помощью этой команды:
источник
Чтобы подключиться к cmd в контейнере Windows, используйте
Где d8c25fde2769 - это идентификатор контейнера.
источник
Это просто !
Перечислите все ваши изображения Docker:
На моей системе это показало следующий вывод:
У меня есть два образа Docker на моем ПК. Допустим, я хочу запустить первый.
Это даст вам терминальный контроль над контейнером. Теперь вы можете выполнять все типы операций оболочки внутри контейнера. Подобно тому, как вы
ls
будете делать , выведите все папки в корне файловой системы.источник
Чтобы проверить файлы, запустите,
docker run -it <image> /bin/sh
чтобы получить интерактивный терминал. Список изображений можно получить с помощьюdocker images
. В противовесdocker exec
этому решению работает также в случае, когда изображение не запускается (или выходит сразу после запуска).источник
GOINSIDE РЕШЕНИЕ
установить
goinside
инструмент командной строки с помощью:и войдите в докер-контейнер с правильным размером терминала:
старый ответ
Мы поместили этот фрагмент в
~/.profile
:Это не только позволяет каждому войти в работающий контейнер с:
Это также решает долгосрочную проблему с фиксированными размерами контейнерных терминалов Docker . Что очень раздражает, если вы сталкиваетесь с этим.
Также, если вы перейдете по ссылке, у вас будет команда завершения для имен ваших контейнеров докеров.
источник
Или в зависимости от оболочки, это может быть
Вы можете получить идентификатор контейнера с помощью
docker ps
команды-i
= интерактивный-t
= выделить псевдо-TTYисточник
Я создал функцию терминала для более легкого доступа к терминалу контейнера. Может быть, это будет полезно и вам, ребята:
В результате вместо ввода:
ты напишешь:
Поместите следующее в ваш ~ / .bash_profile (или что-нибудь еще, что вам подходит), затем откройте новое окно терминала и наслаждайтесь сочетанием клавиш:
источник
вы можете взаимодействовать с терминалом в контейнере Docker, передав опцию -ti
-t обозначает терминал -i обозначает интерактив
источник
docker exec
определенно будет решением. Самый простой способ справиться с заданным вопросом - подключить каталог внутри Docker к каталогу локальной системы .Так что вы можете просматривать изменения локального пути мгновенно.
источник
Использование:
Другой способ, хотя есть опасность для него, это использовать
attach
, но если выCtrl + Cвыходите из сеанса, вы также остановите контейнер. Если вы просто хотите увидеть, что происходит, используйтеdocker logs -f
.источник
Используйте эту команду:
источник
Если у вас установлен Docker
Kitematic
, вы можете использовать графический интерфейс. ОткройтеKitematic
значок Docker и вKitematic
окне выберите свой контейнер, а затем нажмитеexec
значок.В этом графическом интерфейсе вы также можете видеть журнал контейнера и много информации о контейнере (на вкладке настроек).
источник
В моем случае по какой-то причине я должен проверить всю информацию, касающуюся сети, в каждом контейнере. Таким образом, следующие команды должны быть действительными в контейнере ...
Я проверил все эти ответы, ни один из них не помог мне. Я искал информацию на других сайтах. Я не буду добавлять здесь супер ссылку, так как она не написана на английском языке. Поэтому я просто выложил этот пост с кратким описанием для людей, которые предъявляют те же требования, что и я.
Скажем, у вас есть один работающий контейнер с именем light-test. Следуйте инструкциям ниже.
docker inspect light-test -f {{.NetworkSettings.SandboxKey}}
, Эта команда получит ответ как/var/run/docker/netns/xxxx
.ln -s /var/run/docker/netns/xxxx /var/run/netns/xxxx
. Каталог может не существовать, сделатьmkdir /var/run/netns
сначала.ip netns exec xxxx ip addr show
чтобы исследовать сетевой мир в контейнере.PS.
xxxx
всегда одно и то же значение, полученное из первой команды. И, конечно же , любые другие команды являются действительными, то естьip netns exec xxxx netstat -antp|grep 8080
.источник
Другой вариант - использовать nsenter .
источник
nsenter
. Во-первых, это требует, чтобы у вас был физический доступ к хосту докера, который не является заданным (вы можете работать с API удаленного докера). Кроме того, запуск в соответствии сnsenter
освобождает вас от нескольких ограничений безопасности и ресурсов, которые устанавливает Docker (которые могут быть за или против, в зависимости от вашей среды).docker exec
эти дни.docker exec
.docker exec
выглядит более элегантно для меня.Если вы используете Docker Compose, то вы попадете в контейнер Docker.
Внутри контейнера вы попадете в WORKDIR, определенный в Dockerfile. Вы можете изменить свой рабочий каталог:
источник
Выполнить в работающий контейнер с именем
test
, ниже приведены следующие командыЕсли контейнер имеет
bash
оболочкуЕсли контейнер имеет
bourne
оболочку и в большинстве случаев он присутствуетисточник
Для docker-compose (Docker4Drupal)
Я использую Docker для Drupal на ноутбуке с Linux. После запуска контейнера я использую '
docker-compose exec php bash
', чтобы соединиться с контейнером, чтобы я мог запустить drush commandos. Он отлично работает для меня.источник