35

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

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

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

我知道一种解决方法是不使用默认的 boot2docker 作为主机 vm(如这里的答案中所述),但这不是这个问题的意义所在。

4

6 回答 6

102

Vagrant 的 boot2docker 保存了 boot2docker 的 ssh 用户名和密码。

SSH 进入虚拟机

$ boot2docker ssh

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

user: docker
pass: tcuser

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

然后登录:

$ ssh docker@localhost -p 2022
docker@localhost's password: tcuser
                        ##        .
                  ## ## ##       ==
               ## ## ## ##      ===
           /""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
           \______ o          __/
             \    \        __/
              \____\______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 0.8.0
docker@boot2docker:~$ 
于 2014-06-24T00:14:26.407 回答
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
于 2015-10-08T03:19:52.727 回答
11

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

vagrant global-status | grep docker-host

您将获得类似于以下内容的输出:

68f58d0  default  virtualbox running   /Users/yourUser/.vagrant.d/data/docker-host

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

vagrant ssh 68f58d0

vagrant 全局状态文档

于 2014-07-12T22:08:24.097 回答
7

您也可以放弃使用boot2docker'sssh功能并像这样“手动”执行此操作:

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

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

于 2014-08-29T03:02:04.863 回答
3

您可以直接使用 SSH:

ssh docker@$(boot2docker ip)

(密码:tcuser,见https://github.com/boot2docker/boot2docker#ssh-into-vm


你也可以将你的公钥复制/粘贴到 boot2docker 机器上,这样你就不需要每次都输入密码了:

cat ~/.ssh/id_rsa.pub | ssh docker@$(boot2docker ip) 'cat - >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys'
于 2015-03-02T22:26:20.030 回答
2

对于具有vagrant密码的 vagrant 主机:

ssh -p 2222 vagrant@localhost

否则使用tcuser密码:

ssh -p 2222 docker@localhost

以下是有关此工作原理的更多信息。

于 2015-11-10T10:51:42.013 回答