如何通过ssh连接到docker-machine VirtualBox实例?

88

docker-machine 版本为0.2.0,docker 版本为1.6.2。

我正在使用docker-machine通过VirtualBox创建一台虚拟机。一切工作正常,但我想要ssh连接到这台虚拟机,但是没有找到如何操作的说明。我可以连接到ssh端口:

ssh $(docker-machine ip dev)

但是我不知道要使用哪个用户名/密码/身份文件。


4
如果您-1,可以留下评论并解释这个问题的错误之处,让提问者进行修改。 - Roy Truelove
推荐在容器内部连接的Docker方式是docker exec -it my_container /bin/bash,请查看文档https://docs.docker.com/reference/commandline/cli/#exec。 - user2915097
问题是要ssh进入机器本身,而不是docker容器。 - Roy Truelove
1
如果Docker的问题没有编程内容,那么很多问题都会被downvote。可以说,这个问题应该在SF上发布,但这真的是一个判断性的决定。 - Adrian Mouat
8个回答

129

您可以仅运行此命令即可登录Docker Machine主机:

docker-machine ssh default

(这里使用“默认”主机)

身份文件应存储在~/.docker/machine/machines下。如果您想登录容器(而不是主机),请按照用户2915097的建议使用 docker exec


我有另一台电脑(与用于设置远程主机的电脑不同),我想通过docker-machine在这台电脑上访问它(就像我从用于配置的电脑上所做的那样)。我该怎么做? - mahoriR

73
如果您确实需要通过 ssh 进行操作,这是适用于 Docker 1.8.2 版本的解决方案。
初始化 Docker:
eval "$(docker-machine env default)"

从默认的 Docker 机器获取 IP:

docker-machine ip default

这将打印出类似于这样的内容:192.168.99.100

ssh docker@192.168.99.100

密码是tcuser,但您也可以使用身份文件,请参见其他答案。


9
我对你是如何知道密码为tcuser非常好奇。你能透露一下你的秘密吗? :-) - fmquaglia
2
找到了其他地方,但你也可以在这里看到:https://github.com/docker/machine/search?utf8=%E2%9C%93&q=tcuser - timaschew

25

最终,我找到了答案:

我使用的是Docker Toolbox (Docker Machine)在Windows上。

如果我docker-machine -D ssh default,我会发现SSH参数如下:

主机:localhost
端口:51701
用户:docker
密钥:.docker\machine\machines\default\id_rsa

当我更改我的Putty/MobaXterm设置以匹配时,哇,我可以SSH到容器中。


嗨,谢谢。在搜索结果的顶部找到了你的答案。省去了我几个小时的挣扎。点赞! - f123
1
补充一下,我的情况下SSH端口是58361。 使用-D标志打印所有必要的细节。 “使用SSH客户端类型: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进入“活动”的docker-machine。这还为您提供了ssh_key、ssh_port和ssh_user的值,使得可以在本地主机和VM之间进行rsync等操作。

对于那些黑客,这里有一个脚本可以ssh进入“活动”的docker-machine。这还为您提供了ssh_key、ssh_port和ssh_user的值,使得可以在本地主机和VM之间进行rsync等操作。

#!/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

2

对于Mac操作系统,机器和其密钥位于此处(确保您在此处放置了密钥,类似于以下内容:)

~/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) 列出可用的虚拟机。

> ~/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

您可以按照这个链接进行操作: 如何使用Docker

0

您可以使用在终端上常用的语法 登录: docker && 密码: tcuser

例如:ssh docker@192.168.99.X 密码:tcuser


-1
我们还可以通过以下命令ssh进入docker -
docker exec -it /bin/sh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接