[英]Docker for Mac VM IP
我剛剛遷移到使用 Docker for Mac,從之前使用 Docker Toolbox 和 virtualbox for OSX。
我曾經使用$(docker-machine ip default)
獲取機器 IP 地址。
有沒有可靠的方法來獲取 Hyperkit IP 地址?
謝謝!
與Docker 工具箱相反, Docker for Windows和Docker for Mac旨在讓您感覺Docker直接在您的操作系統上運行,因此它們使用在輕量級管理程序(而不是VirtualBox )下運行的輕量級虛擬機,由docker可執行文件直接處理.
因此,您不會使用docker-machine看到它們,也不會看到除localhost之外的其他 IP 地址。
Docker for Windows依賴於HyperV虛擬機管理程序,它允許到tcp://localhost:2375
的網絡連接。
Docker for Mac依賴於xhyve管理程序,它的實現方式僅通過套接字unix:///var/run/docker.sock
提供連接。
為Docker for Mac提供 TCP 連接:
安裝socat 。 隨着釀造:
brew install socat
運行此socat命令將 TCP 請求轉發到套接字
socat TCP-LISTEN:2375,reuseaddr,fork,bind=localhost UNIX-CONNECT:/var/run/docker.sock
在tcp://localhost:2375
上映射您想要的內容
如有必要,由您在啟動時運行socat命令。
例如,這對我將Webstorm nodeJS 調試器關聯到nodeJS容器很有用(因為在撰寫本文時, Webstorm docker 集成插件支持docker調試,但不支持通過 unix 套接字)。
https://docs.docker.com/docker-for-mac/networking/#/known-limitations-use-cases-and-workarounds
macOS 上沒有 docker0 橋接器
由於 Docker for Mac 中的網絡實現方式,您無法在 macOS 中看到 docker0 接口。 這個接口實際上是在 HyperKit 中。
無需像使用 docker docker-machine
那樣直接使用 xhyve VM 的 IP 地址。 所有端口映射都直接映射到localhost
。
$ docker run -d -p 8080:80 nginx:latest
$ curl localhost:8080
另請參閱官方文檔:
當您使用
-p
參數運行容器時,例如:$ docker run -p 80:80 -d nginx
Docker for Mac 將使容器端口在localhost
可用。
您可以將 docker 映像用於 socat,它會在您每次啟動“docker for mac”時啟動
docker run -d --restart=always -p 2376:2375 -v /var/run/docker.sock:/var/run/docker.sock bobrik/socat TCP4-LISTEN:2375,fork,reuseaddr UNIX-CONNECT:/ var/run/docker.sock
找到您的 docker API ip 地址:
ifconfig | grep 'inet 192'| awk '{ print $2}'
我目前的解決方案是使用 Docker Machine(一個在另一個 IP 地址下可用的 linux VM)創建容器,並將容器的所有流量路由到 Docker 機器 VM。
sudo route -n add -net 172.18.0.0/16 192.168.99.100
您可以使用docker inspect
獲取 docker 容器的網絡范圍,使用docker-machine ip
docker 機器 VM 的 IP 地址
另一種解決方法是使用sudo ifconfig lo0 alias 172.17.0.1
這樣您仍然可以使用相同的靜態 IP 地址(如果您的基於 Linux 的同事或 bash 腳本堅持使用它)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.