在舊的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 則留言:
感謝分享~救了我一個下午
張貼留言