如何通过SSH连接到Vagrant 1.6 Docker Provider设置的boot2docker主机vm?

Mot*_*tin 35 vagrant docker boot2docker

我在OSX上,我希望能够通过SSH连接到主机vm,以便:

  1. 访问本机docker环境.这有助于理解和调试端口转发问题.
  2. Vagrant rsync似乎留下了许多未使用的同步目录,这些目录占用了我想要恢复的磁盘空间.

要明确的是,这个问题不是关于ssh:进入Vagrant提供程序创建的docker容器,而是关于Vagrant创建的中间boot2docker主机vm.

我知道,一个解决方法是不使用默认的boot2docker作为主机VM(如答案解释这里),但这不是这个问题是关于什么的.

小智 100

Vagrant的boot2docker保留了boot2docker的ssh用户名和密码.

SSH进入VM

$ boot2docker ssh
Run Code Online (Sandbox Code Playgroud)

Boot2Docker使用生成的SSH密钥自动登录,但如果您想手动SSH(或者您没有使用boot2docker托管VM),则凭据是:

user: docker
pass: tcuser
Run Code Online (Sandbox Code Playgroud)

https://github.com/boot2docker/boot2docker#ssh-into-vm

2022默认情况下,端口从本地端口转发.你可以验证这个:

$ VBoxManage list vms | grep docker
"docker-host_default_1234567890000_1234" {3d66ecf6-4539-47ca-afd2-66f953cd9a3e}
$ VBoxManage showvminfo docker-host_default_1234567890000_1234 | grep ssh
NIC 1 Rule(1):   name = ssh, protocol = tcp, host ip = 127.0.0.1, host port = 2022, guest ip = , guest port = 22
Run Code Online (Sandbox Code Playgroud)

然后登录:

$ ssh docker@localhost -p 2022
docker@localhost's password: tcuser
                        ##        .
                  ## ## ##       ==
               ## ## ## ##      ===
           /""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
           \______ o          __/
             \    \        __/
              \____\______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 0.8.0
docker@boot2docker:~$ 
Run Code Online (Sandbox Code Playgroud)

  • 在最新的Docker中,这已经从`boot2docker`变为`docker-machine` (5认同)
  • 具体来说,它现在是`docker-machine ssh default` (3认同)

Jim*_*oho 15

2015年10月:不推荐使用Boot2docker,转而使用docker-machine.登录:

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM
default   *        virtualbox   Running   tcp://192.168.99.100:2376   

$ docker-machine ssh default
Run Code Online (Sandbox Code Playgroud)


alf*_*dev 11

您可以使用ssh进入docker主机,vagrant ssh docker-host-id但首先您需要知道docker-host-id.
您可以使用vagrant global-status命令获取所有活动Vagrant环境的列表.
要获取docker-host id,您可以使用grep进行过滤:

vagrant global-status | grep docker-host

你将获得类似于的输出:

68f58d0  default  virtualbox running   /Users/yourUser/.vagrant.d/data/docker-host
Run Code Online (Sandbox Code Playgroud)

复制第一列id,然后ssh到docker-host:

vagrant ssh 68f58d0

流浪的全球状态文档

  • 我相信这是最好的答案.我有"常规"boot2docker,我有Vagrant启动的boot2docker.其他答案将我连接到"常规"boot2docker机器,而不是Vagrant正在使用的机器. (5认同)

slm*_*slm 7

您也可以放弃使用boot2dockerssh功能并"手动"执行此操作:

$ ssh \
-i $HOME/.ssh/id_boot2docker \
-p $(boot2docker config 2>&1 | awk '/SSHPort/ {print $3}') \
docker@localhost
Run Code Online (Sandbox Code Playgroud)

参数-p通常是端口2022,但上面显示了如何根据需要以编程方式确定.