1. 程式人生 > >Docker4Windows -- 從外部(非本機host)訪問 由docker container運行的程序

Docker4Windows -- 從外部(非本機host)訪問 由docker container運行的程序

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 的網絡配置/轉發規則。 具體的步驟如下:

  1. Open Oracle VM VirtualBox Manager

  2. Select the VM used by Docker

  3. Click Settings -> Network

  4. Adapter 1 should (default?) be "Attached to: NAT"

  5. Click Advanced -> Port Forwarding

  6. 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運行的程序