Как подключиться по ssh к экземпляру VirtualBox на докер-машине?

83

докер-машина версия 0.2.0 докер версия 1.6.2

Я использую докер-машину для создания машины с помощью VirtualBox . Все работает нормально, но я хотел бы использовать ssh в самой машине, и я не нашел инструкций, как это сделать. Я могу подключиться к ssh-порту:

ssh $(docker-machine ip dev)

Но я понятия не имею, какой файл имени пользователя / пароля / удостоверения использовать.

Рой Трулав
источник
4
Если вы -1, поставьте комментарий и объясните, что не так с этим вопросом, и позвольте пользователю внести поправки.
Рой Трулав
рекомендуемый способ подключения докеров внутри контейнера - docker exec -it my_container /bin/bashсм. doc docs.docker.com/reference/commandline/cli/#exec
user2915097
@ user2915097 Вопрос заключался в том, чтобы ssh в саму машину, а не в докер-контейнер,
Рой Трулав
1
Многие вопросы Docker отклоняются, если в них нет программного контента. Возможно, этот вопрос должен быть о НФ, но на самом деле это суждение.
Адриан Муат,

Ответы:

121

Вы можете войти в хосты докер-машин, просто запустив

docker-machine ssh default

(Здесь используется хост "по умолчанию")

Файлы удостоверений должны храниться в папке ~/.docker/machine/machines. Если вы хотите войти в контейнер (в отличие от хоста), используйте, docker execкак предлагает user2915097.

Адриан Муат
источник
Итак, у меня есть другой компьютер (отличный от того, который использовался для настройки удаленного хоста), и я хочу иметь к нему доступ через докер-машину на этом ПК (точно так же, как я делаю с того, который использовался для обеспечения). Как мне это сделать?
Махори
71

если вам действительно нужно сделать это через ssh, это работает с докером 1.8.2

докер инициализации:

eval "$(docker-machine env default)"

получить IP-адрес со своей докер-машины по умолчанию:

docker-machine ip default

это выводит что-то вроде этого: 192.168.99.100

ssh docker@192.168.99.100

пароль есть, tcuserно вы также можете использовать файл идентификации, см. другой ответ

Тимашев
источник
8
Мне очень любопытно, как вы узнали, что это пароль tcuser. Не могли бы вы раскрыть свой секрет, пожалуйста? :-)
fmquaglia
2
найдено где-то еще, но вы можете увидеть это также здесь: github.com/docker/machine/search?utf8=%E2%9C%93&q=tcuser
timaschew
25

Наконец я нашел ответ:

Я работаю в Windows с Docker Toolbox (Docker Machine).

Если я docker-machine -D ssh defaultобнаружу, что параметры SSH должны быть:

Хост: localhost
Порт: 51701
Пользователь: docker
Ключ: .docker \ machine \ machines \ default \ id_rsa

Когда я изменяю настройки Putty / MobaXterm, чтобы они соответствовали, вуаля, я могу подключиться к контейнеру по SSH.

Джеффри Хоэнштейн
источник
Привет, спасибо. Нашел свой ответ поверх результатов. Спас меня от многих часов разочарования. +1
f123
1
Чтобы добавить, в моем случае порт SSH был 58361. Все необходимые данные выводятся при использовании флага -D. Using SSH client type: external {[-o BatchMode=yes -o PasswordAuthentication=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -o ConnectionAttempts=3 -o ConnectTimeout=10 -o ControlMaster=no -o ControlPath=none docker@127.0.0.1 -o IdentitiesOnly=yes -i C:\Users\<user>\.docker\machine\machines\default\id_rsa -p 58361] C:\Program Files\Git\usr\bin\ssh.exe}
rohitmohta
Где взять docker-machine inspect? Он напечатал нелокальный адрес в Driver->IPAddressпеременной
falko
12

Для хакеров вот сценарий, который подключит ssh к «активной» докер-машине. Это также дает вам значения для ssh_key, ssh_port и ssh_user, что позволяет делать такие вещи, как rsyncмежду localhost и виртуальной машиной .

#!/bin/bash
docker_machine_name=$(docker-machine active)
docker_ssh_user=$(docker-machine inspect $docker_machine_name --format={{.Driver.SSHUser}})
docker_ssh_key=$(docker-machine inspect $docker_machine_name --format={{.Driver.SSHKeyPath}})
docker_ssh_port=$(docker-machine inspect $docker_machine_name --format={{.Driver.SSHPort}})

ssh -i $docker_ssh_key -p $docker_ssh_port $docker_ssh_user@localhost

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

Роберт
источник
5

Если по какой-то причине вы предпочитаете использовать sshкоманду docker-machine ssh, вы можете сделать

ssh `docker-machine ip machine_name` -ldocker -i ~/.docker/machine/machines/machine_name/id_rsa
Ejoubaud
источник
2

Для Mac OX компьютер и его ключи расположены здесь (убедитесь, что у вас есть ключи, как показано ниже:

~/project/dev/docker_notes za$ ls /Users/za/.docker/machine/machines/default/
.DS_Store        ca.pem           config.json      disk.vmdk        id_rsa.pub       server-key.pem
boot2docker.iso  cert.pem         default/         id_rsa           key.pem          server.pem

1) список доступных vms.

> ~/project/dev/docker_notes za$ docker-machine ls
>     NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
>     default   -        virtualbox   Running   tcp://192.168.99.100:2376           v1.11.0

В моем случае имя машины по умолчанию. Итак, просто

~/project/dev/docker_notes za$ docker-machine ssh default


                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.11.0, build HEAD : 32ee7e9 - Wed Apr 13 20:06:49 UTC 2016
Docker version 1.11.0, build 4dc5990
docker@default:~$ vi 
.ash_history  .ashrc        .docker/      .local/       .profile      .ssh/         log.log
docker@default:~$ ls
log.log

Как видите, я могу использовать ssh в docker-machine / instance.

docker@default:~$ uname -a
Linux default 4.1.19-boot2docker #1 SMP Thu Apr 7 02:41:05 UTC 2016 x86_64 GNU/Linux

Вы также можете следовать этому> howto - docker

z atef
источник
-1

Мы также можем использовать ssh в докере с помощью следующей команды -

docker exec -it / bin / sh

jitenagarwal19
источник