2015-05-16 5 views
3

У меня есть некоторые соковыжималки докеров, и теперь я хочу получить доступ к одному с помощью ssh. То работающ я получил соединение через ssh к контейнеру docker.SSH прямо в контейнер-докер

Но теперь у меня есть проблема, я не знаю, с каким пользователем я могу получить доступ в этот контейнер?

Я пробовал это с обоими пользователями, которые у меня есть на главной машине (web & root). Но они не работают. Что делать?

+0

Вам действительно нужно SSH соединение? Вы можете просто использовать sudo docker exec -i -t container-name/bin/bash' для доступа к запущенному контейнеру. – lku

+0

да нужно получить доступ непосредственно в конкретном контейнере – Felix

+0

Хорошо, не могли бы вы поделиться сообщением об ошибке? – lku

ответ

4

Вы можете оставить прямо в бегущего контейнер с:

$ docker exec -it myContainer /bin/bash 

Вы можете получить оболочку на контейнере, который не работает с:

$ docker run -it myContainer /bin/bash 

Это предпочтительный способ получать оболочки на контейнере. Запуск SSH-сервера считается не хорошей практикой и, хотя есть некоторые варианты использования там, следует избегать, когда это возможно.

+0

Мне нужна консоль для доступа с Jenkins в этом контейнере. – Felix

-1

Гораздо более надежное решение сбрасывает nsenter на ваш раскол, затем sshing и бег docker-enter оттуда. Таким образом, вам не нужно запускать несколько процессов в контейнере (ssh-сервер + независимо от того, для чего он предназначен), или беспокоиться обо всех дополнительных накладных расходах пользователей ssh ​​и тому подобных (не говоря уже о проблемах безопасности).

+0

Это еще одна проблема с безопасностью, так как прямой ssh. потому что в Maschine есть много других докеров. Простой SSH должен работать ... Только аутентификация - это проблема – Felix

+0

Парень, создавший изображение докеры 'nsenter' на самом деле [рекомендует] (https://github.com/jpetazzo/nsenter/issues/19#issuecomment-61248200), используя 'docker exec' над' nsenter'. Начиная с введения 'docker exec', это считается лучшей практикой. См. Также [этот вопрос] (http://stackoverflow.com/questions/27873312/docker-exec-versus-nsenter-any-gotchas). – L0j1k

4

Если вы хотите подключить непосредственно в Докер контейнер, без подключения к Docker хоста, ваш Dockerfile должен включать в себя следующее:

# SSH login fix. Otherwise user is kicked off after login 
RUN echo 'root:pass' | chpasswd 
RUN mkdir /var/run/sshd 
RUN sed '[email protected]\s*required\s*[email protected] optional [email protected]' -i /etc/pam.d/sshd 

EXPOSE 22 
CMD ["/usr/sbin/sshd", "-D"] 

Затем используйте Docker прогон с -p и -d флагов. Пример:

docker run -p 8022:22 -d your-docker-image 

Вы можете связаться с:

ssh [email protected] -p8022 
+0

Возможно ли получить более одного сеанса ssh на контейнер? Прямо сейчас я могу подключиться через ssh, но только с одного места. Когда я пытаюсь подключиться из другого места одновременно, я получаю следующую ошибку: '' 'ssh_exchange_identification: read: Connection reset by peer''' –

Смежные вопросы