Как получить bash или ssh в запущенный контейнер в фоновом режиме?

Вы можете создать свой собственный файл OPML, выполнив следующую процедуру:

Сделайте пустой файл и назовите его «opml.xml» (или что угодно, но не забудьте использовать расширение «.xml» для файла. Откройте файл, используя ваш любимый редактор. (Я предпочитаю использование синей рыбы, но вы можете использовать gedit для распознавания кода и выделения). Напишите код, как в этом примере:

(к сожалению, я не могу разместить здесь код, поэтому вместо этого я помещаю изображение, но вы можете получить доступ к примеру моего текущего файла opml в следующей ссылке: пример файла opml

Затем сохраните изменения в файле и попробуйте для импорта этого файла вместо прямого XML-файла rss (в вашем случае iGoogle-settings.xml)

Что нужно учитывать:

Сделать пустой файл и называть его " opml.xml "(или что угодно, но не забудьте использовать расширение« .xml »для файла. xmlUrl должен быть действительным адресом. Если вы используете этот пример для« одноразового импорта », вы может использовать локальные места, используя только имя файла, в этом случае оба файла opml и rss-источник должны быть помещены в одно и то же место. Откройте файл, используя ваш любимый редактор. (Я предпочитаю использование синей рыбы, но вы можете использовать gedit для распознавания кода и выделения).

У меня нет разума в теме, поэтому я, вероятно, отредактирую это в чтобы добавить дополнительную информацию по запросу.

Надеюсь, что создание этого файла поможет вам сделать то, что вы пожелаете.

Удачи!

1
задан 11 November 2016 в 19:16

13 ответов

Начиная с докера 1.3.

docker exec -it <containerIdOrName> bash

В принципе, если контейнер-докер был запущен с помощью команды / bin / bash, вы можете получить к нему доступ с помощью attach, если нет, то вам нужно выполнить команду для создания экземпляра bash внутри контейнера, используя exec

Кроме того, чтобы выйти из bash, не покидая bash, запущенный в процессе изгоев

exit

Jip, что просто.

Примечание: вы должны стараться не запустите команды как sudo, скорее добавьте своего пользователя в группу docker и просто запустите нормально.

550
ответ дан 24 May 2018 в 05:04
  • 1
    еще не понял, как заставить нано работать. THink, который может включать докер-ssh от phusion – WiR3D 29 October 2014 в 17:46
  • 2
    Есть ли способ установить bash по умолчанию в докеры? – ipeacocks 6 April 2015 в 16:13
  • 3
    @ipeacocks yes, если команда RUN в файле docker /bin/bash. Но это зависит от того, что вы имеете в виду. Если вы хотите запустить контейнер и немедленно установить bash в том же терминале, тогда выполнение с -it должно сделать это – WiR3D 7 April 2015 в 10:43
  • 4
    Использование группы докеров - это плохая практика. Любой пользователь, который находится в группе докеров, по существу используется с правами root без использования sudo. projectatomic.io/blog/2015/08/&hellip – Maiku Mori 7 March 2016 в 21:48
  • 5
    Я думаю, что это не имеет большого значения, с точки зрения безопасности хоста, используете ли вы sudo vs docker группу. В любом случае есть дыра безопасности, встроенная в докер, которая может предоставить полные привилегии в файловой системе хоста от гостя - независимо от того, используете ли вы группу докеров или sudo для запуска контейнера. – nobar 12 August 2017 в 00:39

Хотя автор вопроса специально сказал, что они заинтересованы в запущенном контейнере, также стоит отметить, что если контейнер не запущен, но вы хотите запустить его, чтобы выкачать, вы можете запустить:

docker run -i -t --entrypoint /bin/bash <imageID>

94
ответ дан 24 May 2018 в 05:04

Попробуйте следующее:

sudo docker run -i -t webserver /bin/bash

Источник: https://docs.docker.com/articles/basics/#running-an-interactive-shell

23
ответ дан 24 May 2018 в 05:04
  • 1
    Это не подходит, потому что я получаю различный идентификатор контейнера (root@42f1e37bd0e5:/#, а не root@665b4a1e17b6:/#) – Timur Fayzrakhmanov 1 August 2014 в 21:31
  • 2
    ссылка мертва, вам следует обновить – Ahmet Karakaya 15 April 2018 в 18:04

На основании ответа @ Timur я создал следующий удобный скрипт

Setup

Положите файл docker-ssh в ваш $PATH со следующим содержимым

[ f1]

Примечание. В некоторых контейнерах нет bash, но ash, sh и т. д. В этих случаях bash следует заменить в приведенном выше сценарии.

Использование

Если у вас есть один запущенный экземпляр, просто запустите

$> docker-ssh 

В противном случае укажите ему парметер-идентификатор докеры, который вы получите из docker ps (первый col)

$> docker-ssh 50m3r4nd0m1d
10
ответ дан 24 May 2018 в 05:04
  • 1
    Могу ли я узнать, зачем нам нужно в конце? – Nam G VU 24 November 2017 в 10:46
  • 2
    для запуска bash в качестве оболочки входа в систему, считывая параметры среды (описанные в строке над командой) – Matyas 24 November 2017 в 15:15

Я создал контейнерный SSH-сервер, который предоставляет возможности SSH для любого запущенного контейнера. Вам не нужно менять контейнер. Единственное требование состоит в том, что у контейнера есть bash.

Если у вас есть контейнер с именем «web-server1». Следующая команда запуска docker запустит второй контейнер, который предоставит SSH для первого контейнера.

docker run -ti --name sshd-web-server1 -e CONTAINER=web-server1 -p 2222:22 \
-v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker \
jeroenpeeters/docker-ssh

Для получения дополнительных указателей, https://github.com/jeroenpeeters/docker-ssh[!d2 ]

7
ответ дан 24 May 2018 в 05:04

@jpetazzo имеет потрясающее сообщение об этой теме. Короткий ответ будет заключаться в использовании nsenter:

PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
nsenter --target $PID --mount --uts --ipc --net --pid

PS: Не забудьте проверить обсуждение в комментариях сообщения ...

Приветствия

5
ответ дан 24 May 2018 в 05:04

Если у контейнера не установлен bash (например, consul), вы можете попробовать sh:

docker exec -it CONTAINER /bin/sh

Или сначала искать оболочки в / bin:

docker export CONTAINER|tar -t|egrep ^bin/
3
ответ дан 24 May 2018 в 05:04
docker run -it openjdk:8

Это работает: -)

2
ответ дан 24 May 2018 в 05:04

Вы также можете предоставить Docker Container маршрутизируемый IP-адрес с помощью Pipework и после этого SSH в машину с этим новым IP.

Это будет более «традиционным» (ssh), вместо использования например, команда docker attach, и в конечном итоге сделает ее более «переносимой» в разных системах и версиях.

2
ответ дан 24 May 2018 в 05:04
  • 1
    Пожалуйста, добавьте простой способ, как это сделать. Если честно, мне это действительно нужно, но у меня нет времени искать простейшее решение для этого. Не могли бы вы разместить свой ответ здесь? Было бы здорово.. – Timur Fayzrakhmanov 29 October 2014 в 16:08
  • 2
    Есть два способа добиться этого, но это не просто и станет большой почтой. Вы можете проверить эту ссылку самостоятельно, для использования трубопровода или этой ссылки , ведьма по существу выполняет то же самое, что и Pipework, и немного проще, но вам нужно это сделать вручную. Так что это зависит от того, сколько серверов разговаривает. Если вы не можете понять что-то более конкретное, дайте мне знать. Но у меня тоже нет времени писать полный учебник. – radriaanse 29 October 2014 в 16:30
  • 3
    Вы правы - нет очевидного и простого способа сделать это (спасибо за ссылки, я думаю, что перейду позже. – Timur Fayzrakhmanov 29 October 2014 в 16:57

Чтобы перейти в запущенный контейнер, введите это:

docker exec -t -i container_name /bin/bash
0
ответ дан 24 May 2018 в 05:04

, если контейнер остановлен, как, например, контейнер только для данных, тогда хорошим решением является запуск контейнера сбрасывания каждый раз, когда вы хотите подключиться к контейнеру данных. В этом случае сам контейнер данных может быть полностью пустым, так как временный контейнер будет иметь ОС.

$ docker run --rm --volumes-from mydata -it ubuntu bash
root@645045d3cc87:/# ls /mydata
root@645045d3cc87:/# touch /mydata/foo
root@645045d3cc87:/# exit
exit
0
ответ дан 24 May 2018 в 05:04

Только для информации. Если вам нужно войти в простой контейнер, который не является демоном, вам необходимо использовать следующие команды:

docker start {id}
docker attach {id}
0
ответ дан 24 May 2018 в 05:04

Несколько раз это будет удобно, если вы сможете использовать ssh-in docker container, особенно во время разработки. Следующий докер позволяет ssh-into контейнеру использовать закрытый ключ https://hub.docker.com/r/devkhadka/ubuntuwithssh/. Gist of Dockerfile - https://gist.github.com/devbkhadka/98792f7bca57f9778793b2db758b3d07

0
ответ дан 24 May 2018 в 05:04

Другие вопросы по тегам:

Похожие вопросы: