1. 程式人生 > >Mac使用Docker-machine訪問docker publish port

Mac使用Docker-machine訪問docker publish port

example forward blob ner 動態 clas mach -a conf

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