AdSense

網頁

2020/5/1

Windows Docker Toolbox連線到docker nginx

在舊的Windows 7或Windows 10家用版因為沒有Hiper-V,所以必須安裝Docker Toolbox來使用docker。

而Docker Toolbox其實是把docker裝在Oracle VirtualBox的虛擬機上來模擬環境,因此Docker Toolbox的docker container綁定的主機的port其實是VirtualBox虛擬機的port,而非真正實體主機的port,因此要連到docker container的port,還必須在VirtualBox設定「連接埠轉送(Port Forwarding)」來把實體主機的port對映到VirtualBox的port。

例如我在Docker Toolbox的docker中使用
docker run --detach --publish=80:80 --name=webserver nginx
運行一個nginx web伺服器的docker container,並將container的80 port對映到"主機"的80 port。

$ docker run --detach --publish=80:80 --name=webserver nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
000eee12ec04: Pull complete
eb22865337de: Pull complete
bee5d581ef8b: Pull complete
Digest: sha256:50cf965a6e08ec5784009d0fccb380fc479826b6e0e65684d9879170a9df8566
Status: Downloaded newer image for nginx:latest
b47952bc76d2896e8e8fe67f849d1ff64ac7ad1291eb60a09cb3facdb3c836ab

使用docker container ls可看到在運行中的nginx容器,容器的80 port號對映到"主機"的80 port。

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
b47952bc76d2        nginx               "nginx -g 'daemon of…"   18 minutes ago      Up 18 minutes       0.0.0.0:80->80/tcp   webserver

這邊的"主機"其實是VirtualBox,因此在本機電腦的瀏覽器輸入localhost:80並無法連接到docker的nginx,還需另外設定實體主機和VirtualBox的port對映(連接埠轉送(Port Forwarding))。

開啟Oracle VM VirtualBox工具,選擇預設(defualt)的虛擬機。



點選[設定值]按鈕開啟設定視窗。選擇[網路] -> [介面卡1] -> [進階],點選連接埠轉送(P)



點選右側的新增一組轉送規則,名稱任意命名。本範例命名為docker-nginx
主機IP空白,意思就是實體主機使用localhost,主機連接埠設定你想利用的實體主機port號,在此使用9010
客體IP空白,代表VirtualBox也使用localhost,客體連接埠設定為docker對映的"主機"port號,也就是80。
設定好後按確定



完成以上設定後即可在本機瀏覽器輸入localhost:9010連到docker的ngnix伺服器。



以上的ip連結路徑示意圖。

+--------+   +---------------+   +-----------------+   +------------------------+
|Browser |-->|localhost:9010 |-->|  localhost:80   |-->|      localhost:80      |
|(Client)|   |(Physcal Host) |   |(VirtualBox Host)|   |(Docker nginx container)|
+--------+   +---------------+   +-----------------+   +------------------------+


參考:

1 則留言:

丹尼老爹 提到...

感謝分享~救了我一個下午

AdSense