Docker4Windows -- 從外部(非本機host)訪問 由docker container運行的程序
阿新 • • 發佈:2017-05-19
style 機器 轉發 配置 tin 外部 acl 16px 轉發規則
背景
當我們在windows 上面運行docker container的時候,我們需要借助於模擬器(例如,Virtual box/Hyper V),她的目的主要是在我們的windows系統上面模擬出一個Linux環境來運行docker engine,從而在實現在windows機器上面跑docker.。通常,我們把這個模擬器稱理解為為docker machine。
然而,由此產生了一個問題,那就是相對於Linux,我們在Windows上面跑docker的時候,docker與host之間就多出來了一個中間層(docker machine)。所以,當我們需要在非本機上面訪問由container提供的“服務”時,除了expose host/container的端口之外,還需要保證中間層暢通。
設置docker machine
具體的方法很簡單,就是通過設置virtual box 的網絡配置/轉發規則。 具體的步驟如下:
-
Open Oracle VM VirtualBox Manager
-
Select the VM used by Docker
-
Click Settings -> Network
-
Adapter 1 should (default?) be "Attached to: NAT"
-
Click Advanced -> Port Forwarding
-
Add rule: Protocol TCP, Host Port 1521, Guest Port 1521(leave Host IP and Guest IP empty)
貌似有點亂呀,沒看懂?沒關系!,下面舉例說明並配有截圖(有真相)
我這裏的示例是用docker跑一個oracle server 的container,他運行在一臺windows機器上面(Host A),然後我在另一個windows機器(Host B)上面鏈接oracle server.
1. 我這裏省略了部分container 的過程,只列出CLI
$ docker run -itd --name=xxx --network=xxxNet --hostname=xxx -p 1521:1521 oracledb11g_img:v1 /bin/bash
2. virtual box 中關於網絡的配置:
3. 在另外一臺機器上通過SQL Deverloper 鏈接由docker continer創建的數據庫
Done!! 證明由docker container 承載的 oracle server 可以被其他機器訪問。
Docker4Windows -- 從外部(非本機host)訪問 由docker container運行的程序