docker机器中的端口转发?
由于boot2docker
被弃用,我已经切换到docker-machine
但我不知道如何从docker-machine
打开一个端口。 在boot2docker
我可以这样做:
boot2docker ssh -L 27017:localhost:27017
只要SSH连接处于打开状态,就会将端口27017从VirtualBox转发到本地主机27017。 请注意,我不想在VirtualBox中永久打开端口。 如何用docker-machine
实现这个docker-machine
?
您仍然可以从Docker机器使用的VirtualBox访问VBoxmanage.exe命令:
VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port27017,tcp,,27017,,27017";
- 使用
docker-machine info
来获取您的虚拟docker-machine info
的名称。 - 如果vm尚未启动,请使用
modifyvm
。
在这个答案中看到一个实际的例子。
这是目前的解决方法,等待将parameter passing给docker-machine ssh
的可能性:请参阅问题691 。
另一个解决方法是不转发端口,直接使用虚拟机的IP:
$(docker-machine ip default)
正如sdc 所说 :
您可以确认端口转发设置正确
VBoxManage showvminfo boot2docker-vm | grep "NIC.* Rule"
使用最新版本的机器,你可以简单地做( 默认是机器的名称):
docker-machine ssh default -L 27017:localhost:27017
这是比VMconfiguration更改更临时的解决scheme。
使用以下变化仅在后台进程中转发端口:
docker-machine ssh default -f -N -L 27017:localhost:27017
- -f请求ssh在命令执行之前转到后台。
- -N允许空命令(这里只用于转发端口)
你可以ssh进入机器并传递常规的端口转发参数:
ssh docker@$(docker-machine ip default) -L 27017:localhost:27017
docker用户的密码是tcuser 。 (请参阅https://github.com/boot2docker/boot2docker )
由于我很难记住如何做到这一点,我创build了一个名为pf (代表“端口转发”)的小型bash脚本,它允许您执行:
$ pf 8080
这将在后台将Docker端口8080转发到主机端口8080(追加-f
使其在前台运行)。 要使用不同的主机端口,只需:
$ pf 8090:8080
将主机端口8090映射到8080。
停止端口转发add -s
:
$ pf 8090:8080 -s
(实际上主机端口也是足够的: pf 8090 -s
)。 还有其他的选项可用,所以检出github页面。
如果你不想使用密码,我想补充一点,你应该指向私钥。
ssh -L 8080:localhost:8080 -i ~/.docker/machine/machines/default/id_rsa docker@$(docker-machine ip default)
只需在脚本中增强@VonC的答案 – 目前如果在MacOS X上使用Docker Toolbox,默认的VM机器是“default”。 所以一个映射所有从容器中暴露的脚本应该是这样的:
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
如果您尝试执行多次,则应添加创build之前的语句以删除现有规则:
VBoxManage controlvm "default" natpf1 delete "${port_type}-port${port_num}"
在脚本中,假设您已经将端口从容器转移到虚拟机。
docker port cassandra
给出如下输出:
7000/tcp -> 0.0.0.0:7000