51

由于boot2docker已弃用,我已切换到docker-machine但我不知道如何从docker-machine. 在boot2docker我可以这样做:

boot2docker ssh -L 27017:localhost:27017

只要 SSH 连接打开,这会将端口 27017 从 VirtualBox 转发到 localhost 27017。请注意,我不是在寻找在 VirtualBox 中永久打开端口的方法。我怎样才能做到这一点docker-machine

4

6 回答 6

49

您仍然可以从 docker 机器使用的 VirtualBox 访问 VBoxmanage.exe 命令:

VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port27017,tcp,,27017,,27017";
  • 用于docker-machine info获取您的虚拟机的名称。
  • modifyvm如果 vm 尚未启动,请使用。

请参阅此答案中的实际示例。


这是当前的解决方法,等待将参数传递给的可能性docker-machine ssh:参见问题 691

另一种解决方法是转发端口,直接使用虚拟机的 IP:

 $(docker-machine ip default)

正如sdc评论的那样:

您可以确认端口转发设置正确

 VBoxManage showvminfo boot2docker-vm | grep "NIC.* Rule" 
于 2015-08-24T05:46:30.730 回答
28

使用最新版本的机器,您可以简单地执行(默认是机器的名称):

docker-machine ssh default -L 27017:localhost:27017

这是比 VM 配置更改更临时的解决方案。

使用以下变体仅在后台进程中转发端口:

docker-machine ssh default -f -N -L 27017:localhost:27017
  • -f请求 ssh 在命令执行前进入后台。
  • -N允许空命令(此处仅用于转发端口)
于 2016-01-02T21:43:09.783 回答
18

您可以通过 ssh 进入机器并传递常规端口转发参数:

ssh docker@$(docker-machine ip default) -L 27017:localhost:27017

docker用户的密码是tcuser。(见https://github.com/boot2docker/boot2docker

于 2015-10-03T19:29:44.237 回答
10

由于我很难记住如何执行此操作,因此我创建了一个名为pf(代表“端口转发”)的小型 bash 脚本,它允许您执行以下操作:

$ pf 8080

这会将 docker 端口 8080 转发到后台的主机端口 8080(附加-f以使其在前台运行)。要使用不同的主机端口,只需执行以下操作:

$ pf 8090:8080

它将主机端口 8090 映射到 8080。

要停止端口转发,请添加-s

$ pf 8090:8080 -s

(实际上主机端口也足够了:)pf 8090 -s。还有其他可用选项,因此请查看github页面。

于 2016-04-08T08:20:34.487 回答
4

如果您不想使用密码,我会补充说您应该只指向私钥。

ssh -L 8080:localhost:8080 -i ~/.docker/machine/machines/default/id_rsa docker@$(docker-machine ip default)
于 2015-10-27T17:00:28.373 回答
1

只是为了在脚本中增强@VonC 的答案——目前如果在 MacOS X 上使用 Docker Toolbox,默认的 VM 机器是“默认”。所以一个映射所有暴露的容器的脚本应该如下所示:

for port in `docker port cassandra | cut -d'-' -f1`; 
do 
    port_num=`echo ${port} | cut -d'/' -f1`
    port_type=`echo ${port} | cut -d'/' -f2`
    echo "Create rule natpf1 for ${port_type} port ${port_num}"
    VBoxManage controlvm "default" natpf1 "${port_type}-port${port_num},${port_type},,${port_num},,${port_num}"
done

如果您尝试执行多次,则应在创建前添加一条语句以删除现有规则:

VBoxManage controlvm "default" natpf1 delete "${port_type}-port${port_num}"

在脚本中,它假定您已经将端口从容器转发到 VM。

docker port cassandra

给出如下输出:

7000/tcp -> 0.0.0.0:7000
于 2016-01-12T19:50:03.290 回答