docker-machine中的端口转发?

Joh*_*han 47 docker boot2docker docker-machine

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

boot2docker ssh -L 27017:localhost:27017
Run Code Online (Sandbox Code Playgroud)

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

Von*_*onC 46

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

VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port27017,tcp,,27017,,27017";
Run Code Online (Sandbox Code Playgroud)
  • 使用docker-machine info让您的虚拟机的名称.
  • 使用modifyvm如果VM尚未启动.

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


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

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

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

作为评论SDC:

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

 VBoxManage showvminfo boot2docker-vm | grep "NIC.* Rule" 
Run Code Online (Sandbox Code Playgroud)


Dav*_*vid 26

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

docker-machine ssh default -L 27017:localhost:27017
Run Code Online (Sandbox Code Playgroud)

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

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

docker-machine ssh default -f -N -L 27017:localhost:27017
Run Code Online (Sandbox Code Playgroud)
  • -f请求ssh在命令执行之前转到后台.
  • -N允许空命令(此处仅用于转发端口)

  • 试图执行`docker-machine ssh default -N -L 80:localhost:80`并且有错误:`特权端口只能由root转发.退出状态255` (2认同)

小智 17

您可以ssh进入计算机并传递常规端口转发参数:

ssh docker@$(docker-machine ip default) -L 27017:localhost:27017
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢,非常有帮助.顺便说一句,在大多数系统上,这只会使端口27017绑定到本地环回适配器,这意味着它无法从主机外部访问.使用`ssh docker @ $(docker-machine ip default)-L 1.2.3.4:27017:localhost:27017`将其公开给外界,其中1.2.3.4是本地IP地址. (7认同)

Joh*_*han 9

由于我很难记住如何做到这一点,我创建了一个名为pf的小bash脚本(代表"port forward"),它允许你做:

$ pf 8080
Run Code Online (Sandbox Code Playgroud)

这将在后台将docker端口8080转发到主机端口8080(附加-f以使其在前台运行).要使用其他主机端口,请执行以下操作:

$ pf 8090:8080
Run Code Online (Sandbox Code Playgroud)

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

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

$ pf 8090:8080 -s
Run Code Online (Sandbox Code Playgroud)

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