如何 SSH 进入 Vagrant 内 运行 的 docker 容器?

How to Ssh into docker container that is running inside Vagrant?

我是 运行 Windows 7 下的 Vagrant 虚拟机。 Vagrant 虚拟机是 运行 一个 docker 容器。所以配置是:

Windows7[Vagrant[Docker]]

我想从 Windows ssh 进入 Docker 容器。

docker 容器是 运行 sshd,我可以成功地从 Vagrant VM ssh 到 Docker 容器。

sudo docker ps

给出:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                   NAMES
64b13daab5f2        ubuntu:12.04        "/bin/bash"         14 minutes ago      Up 14 minutes       0.0.0.0:49153->22/tcp   thirsty_morse

来自 Vagrant 虚拟机:

ssh root@localhost -p 49153

工作正常。因此 Vagrant VM 的端口 49153 被转发到 Docker 容器的端口 22。

我已经添加了

config.vm.network "forwarded_port", guest:49153, host:49155

到 Vagrantfile,以便 Windows 上的 localhost:49155 转发到 Vagrant VM:49153

这就是问题所在。当我尝试从 Windows ssh 到 localhost:49155 时,我得到:

ssh: connect to host localhost port 49155: Connection refused

所以 Windows:49155 -> Vagrant:49153 不起作用。我认为这可能是与监听 Vagrant VM 的外部 ip 上的端口有关的问题,所以我将 rinetd 安装到 Vagrant VM 中并完成了:

bindadress    bindport  connectaddress  connectport
0.0.0.0       49153     127.0.0.1       49153

仍然没有运气。我在这里错过了什么?

好的,回答我自己的问题。现在可以了。我认为问题最可能的原因是端口 49153/55 及其邻居实际上被某些 windows 服务默认使用。我将 Vagrant 文件中的端口映射更改为将 9090 用于 Windows,并且一切正常。也不需要 rinetd。我也做过:

sudo docker run -v /vagrant:/opt/data -p 0.0.0.0:49153:22 -i -t ubuntu:12.04

注意 0.0.0.0:它可能相关也可能不相关,但此配置对我有用。