簡體   English   中英

docker的`net = host`設置是如何工作的,我怎么能用VirtualBox做類似的事情呢?

[英]How does docker's `net=host` setting work, and how can I do something similar with e.g. VirtualBox?

Docker 在此處記錄了一個運行選項net=host ,允許您運行與主機共享網絡堆棧的虛擬機 - 例如,docker容器內的進程可以通過localhost連接到主機,反之亦然。

我想在Mac OS X上設置一個Linux VM來做同樣的事情; 我嘗試過使用Vagrant及其各種網絡設置而沒有太多運氣。

Docker的VM是否依賴主機和客戶操作系統都是Linux,或者是否有某種方法可以實現我缺少的OSX-> Linux?

感謝各位同事的幫助,我找到了解決這個問題的方法。 此解決方案適用於boot2docker / VirtualBox。 我剛用boot2docker init創建了我的boot2docker init VM,我沒有對VM配置進行任何特定的更改。

首先,使用--net=host運行--net=host ,以便它與主機VM共享網絡,例如

docker run -it --net=host ubuntu bash

然后,您需要從用於boot2docker ssh容器的VM中找到IP地址,您可以通過在OSX主機上運行boot2docker ssh來完成此操作。 然后,您可以通過查找其網關來查找VM的IP地址:

$ netstat -rn | grep UG | awk '{print $2}'
10.0.2.2

所以在我的情況下它是10.0.2.2。 您現在可以使用此IP地址訪問主機上打開的端口,即從Docker容器在OSX上運行的程序。

要自動化,您可以先找到IP地址,然后將其作為環境變量傳遞給docker命令...

我找到了另一個有效的答案,我將在這里分享,以便人們可以選擇:)

首先,您需要弄清楚OSX主機上首選網絡接口的IP地址是什么。 以下shell命令為我做了這個:

echo "show State:/Network/Global/IPv4" | scutil | grep PrimaryInterface | awk '{print $3}' | xargs ifconfig | grep inet | grep -v inet6 | awk '{print $2}'

在我的情況下,這打印出: 10.226.98.247

然后你可以簡單地在docker中使用該地址,或者甚至更好地為這個地址提供docker內部的主機名:

docker run -it --add-host dockerhost:10.226.98.247 ubuntu bash

然后,您可以在dockerhost容器中使用相同的dockerhost主機名,無論您在哪個環境中啟動容器...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM