Mac使用Docker-machine訪問docker publish port
阿新 • • 發佈:2017-06-27
example forward blob ner 動態 clas mach -a conf
假設你須要公布其它port,僅僅需把80改變就可以。
-p選項的含義是把80port綁定在主機的80port(這裏的“主機”指docker-machine或者boot2docker容器)
這裏我就能夠通過http://192.168.99.100:80去訪問我公布的image
或者你能夠設置VirtualBox的參數來進行port轉發:
假設你的VM還在running,你須要執行下面命令:
如今你能夠通過localhost:80去訪問了。
使用VBoxManage modifyvm命令轉發49XXXport。
假設須要刪除公布的port,能夠這麽做:
另公布jboss會發現外部無法訪問,這是由於jboss應用僅僅對localhost有效,假設想讓外部訪問。必須在啟動命令後面加上
這樣就綁定了全部ip,不然僅僅有本機可以進行訪問。
本文參考: https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md
https://github.com/boot2docker/boot2docker/issues/976
https://fogstack.wordpress.com/2014/02/09/docker-on-osx-port-forwarding/
Step 1、Export the port in your container(docker-machine or boot2docker)
首先,要保證你公布port的image已經run起來了。假設你是通過Dockerfile build起來的image。註意在image裏面加上以下的一段話:
Expose 80
假設你須要公布其它port,僅僅需把80改變就可以。
Expose這個命令的意思是docker image公布一個port。
然後你須要將基於這個容器的image指定一個port去綁定:
docker rum -p 80:80 -d YOUR_IMAGE
-p選項的含義是把80port綁定在主機的80port(這裏的“主機”指docker-machine或者boot2docker容器)
假設你不想在你的mac或者windows上通過http://localhost:80的方式去訪問,到這就能夠結束了。
你能夠通過你docker-machine或者boot2docker的ip去訪問。
$docker-machine ip MACHINE_NAME 192.168.99.100
這裏我就能夠通過http://192.168.99.100:80去訪問我公布的image
Step 2、Configure VirtualBox
大家都知道docker-machine和boot2docker本身是不能直接在mac或windows下執行的,它必須依附一個VM,這裏的VM就是VirtualBox。怎樣讓我們在本機訪問docker裏公布的應用,這裏就須要打開VirtualBox的port forwarding。
執行下面命令通過ssh去轉發OSX/Windows的80port到boot2docker/docker-machine VM的80port:
$ boot2docker ssh -vnNTL *:80:localhost:80
或者你能夠設置VirtualBox的參數來進行port轉發:
$ VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port8000,tcp,,80,,80";
假設你的VM還在running,你須要執行下面命令:
$ VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port8000,tcp,,80,,80";
如今你能夠通過localhost:80去訪問了。
假設你有非常多容器公布同一個port,你有必要使用docker的動態轉發
For example, running 3 nginx containers:
container-1 : 80 -> 49153 (i.e. docker run -p 49153:80 ...) container-2 : 80 -> 49154 (i.e. docker run -p 49154:80 ...) container-3 : 80 -> 49155 (i.e. docker run -p 49155:80 ...)
使用VBoxManage modifyvm命令轉發49XXXport。
這樣的方法能夠非常easy做到同一時候轉發。
# vm must be powered off for i in {49000..49900}; do VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port$i,tcp,,$i,,$i"; VBoxManage modifyvm "boot2docker-vm" --natpf1 "udp-port$i,udp,,$i,,$i"; done
假設須要刪除公布的port,能夠這麽做:
# vm must be powered off for i in {49000..49900}; do VBoxManage modifyvm "boot2docker-vm" --natpf1 delete "tcp-port$i"; VBoxManage modifyvm "boot2docker-vm" --natpf1 delete "udp-port$i"; done
另公布jboss會發現外部無法訪問,這是由於jboss應用僅僅對localhost有效,假設想讓外部訪問。必須在啟動命令後面加上
<strong><span style="font-size:24px;">-b 0.0.0.0</span></strong>
這樣就綁定了全部ip,不然僅僅有本機可以進行訪問。
本文參考: https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md
https://github.com/boot2docker/boot2docker/issues/976
https://fogstack.wordpress.com/2014/02/09/docker-on-osx-port-forwarding/
Mac使用Docker-machine訪問docker publish port