簡體   English   中英

如何綁定VM docker-machine創建OSX IP地址?

[英]How to bind the VM docker-machine creates to OSX IP address?

我正在使用最新的Docker工具包在OSX上使用Docker在本地開發。 我有一個在docker容器中運行的節點服務器,綁定到VM的端口9999。 我可以從我的Mac上的瀏覽器中點擊這個服務器,我想從同一網絡上的另一台設備上攻擊。 有沒有辦法將VM綁定到機器的IP地址? 或以其他方式揭露它?

我今天剛想出這個! 我在Mac OS 10.10.5上使用帶有virtualbox的docker-machine。 我嘗試的第一件事是將網絡接口從NAT更改為Bridged。 這只會破壞docker-machine與VM通信的能力。

相反,我添加了另一個在橋接模式下運行的網絡適配器。 啟動docker-machine后我得到了這個:

$ docker-machine ip redis-test
10.222.11.242

這是我的辦公室或VPN上的其他任何人都可以訪問的本地網絡地址。

然后,如果我運行如下:

$ docker run -p 6379:6379 -d redis

我得到一個在10.222.11.242地址的端口6379上運行的容器化redis服務。

所以我可以從網絡上的任何其他地方做到這一點:

$ telnet 10.222.11.242 6379
Trying 10.222.11.242...
Connected to 10.222.11.242.
Escape character is '^]'.
info
$1827
# Server
redis_version:2.8.19
...

作為一個很酷的獎金,我們可以像這樣重新映射端口:

$ docker run -p 8080:6379 -d redis
e7cc53d9c157a658041c3bee5967dd3678b4d35e6146a02220a87bfebfc919ad
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
e7cc53d9c157        redis               "/entrypoint.sh redis"   7 seconds ago       Up 6 seconds        0.0.0.0:8080->6379/tcp             goofy_yonath
bf1dc6c7c6b5        redis               "/entrypoint.sh redis"   51 minutes ago      Up 51 minutes       0.0.0.0:6379->6379/tcp             redis

現在我有兩個redis實例偵聽同一IP的不同端口(6379和8080)。

編輯:這里有一些細節,以幫助那些在VirtualBox中添加NIC到VM的困惑。 我只使用了VirtualBox,並且無法建議其他虛擬化系統配置。

  1. 通過在VM Manager中選擇VM並使用右鍵單擊菜單或按“command-F”來停止VM。
  2. 單擊“設置”。
  3. 點擊“網絡”。
  4. 選擇當前未啟用的其中一個適配器。
  5. 啟用它。
  6. 在“附加到”選項中選擇“橋接適配器”。
  7. 單擊確定。
  8. 啟動您的VM並試用它。

注意:我確信有一些聰明的命令行選項可用於執行此設置,但因為我只需要設置它一次我從未打擾自動化它。

您可以在VirtualBox NAT適配器上設置端口轉發。

將其橋接到本地網絡(在上面的答案中)與使用OSX IP地址不同。 如果您使用筆記本電腦並轉移到不同的互聯網連接,橋接有時會導致額外的麻煩。 VM可能不會自動從新網絡中提取新IP等。

在UI中,轉到設置 - >網絡 - >端口轉發或從命令行輸入如下內容:

VBoxManage controlvm "default" natpf1 "tcp-port9999,tcp,,9999,,9999";

其中“default”是VM的名稱(“默認”通常用於docker-machine),9999是您要映射的端口。

有關更多信息, 訪問: https//github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

https://www.virtualbox.org/manual/ch06.html (使用NAT配置端口轉發)

你把expose命令放在Dockerfile中了嗎?

EXPOSE 9999

根據@ e.thompsy的答案,這是命令行版本。 首先,找出您需要使用的接口名稱:

vboxmanage list bridgedifs

對我來說這是en1。 然后:

docker-machine create ...

docker-machine stop $VM

vboxmanage modifyvm "$VM" --nic3 bridged --bridgeadapter3 en1

docker-machine start $VM

暫無
暫無

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

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