Docker для Mac VM IP

Я только что перешел на использование Docker для Mac, ранее используя Docker Toolbox с virtualbox для OSX.

я использовал, чтобы получить IP-адрес с $(docker-machine ip default).

есть ли надежный способ получить IP-адрес Hyperkit?

спасибо!

5 ответов


нет необходимости работать с IP-адресом XHYVE VM напрямую, как с docker-machine. Все сопоставления портов напрямую сопоставляются с localhost.

$ docker run -d -p 8080:80 nginx:latest
$ curl localhost:8080

Смотрите также официальная документация:

при запуске контейнера с


в оппозиции к Docker toolbox, Docker для Windows и настройки для Mac предназначены, чтобы дать вам ощущение того, что настройки работает непосредственно на вашей ОС, поэтому они используют легкие виртуальные машины, работающие под легкими гипервизорами (вместо VirtualBox) обрабатываются непосредственно настройки исполняемый файл.
Следовательно, вы не увидите их с докер-машина и вы не увидите другой IP-адрес, чем localhost в.

Docker для Windows использует нормальной работы гипервизор, который позволяет сетевое подключение к tcp://localhost:2375.

настройки для Mac использует xhyve гипервизор, то, как он реализован, обеспечивает только соединение через сокет unix:///var/run/docker.sock.

решение

чтобы обеспечить TCP-соединение для настройки для Мак!--7-->:

  1. установить socat. С квас:

    brew install socat

  2. запустить socat команда для пересылки TCP-запросов в сокет

    socat TCP-LISTEN:2375,reuseaddr,fork,bind=localhost UNIX-CONNECT:/var/run/docker.sock

  3. карта, что вы хотите на tcp://localhost:2375

до вас, чтобы запустить socat команда при запуске, если необходимо.

Это было например полезно для меня ассоциировать Webstorm nodeJS отладчик до nodeJS контейнер (так как на момент написания, отладка docker поддерживает плагин интеграции WebStorm docker, но не через сокеты Unix).

документация по ограничениям Docker для Mac

https://docs.docker.com/docker-for-mac/networking/#/known-limitations-use-cases-and-workarounds

на macOS нет моста docker0

из-за того, как сеть реализована в Docker для Mac, вы не можете увидеть интерфейс docker0 в macOS. Этот интерфейс фактически находится в HyperKit.


вы можете использовать docker image для socat, который запускается каждый раз, когда вы запускаете "docker для mac"

docker run-d -- restart=всегда-p 2376:2375-v /var / run / docker.носок:/var/run / docker.носок Бобрик / socat TCP4-слушай:2375,вилка,опция -- reuseaddr в Unix-соединение: в/var/работа/докер.носок!--2-->

найдите свой IP-адрес docker API:

ifconfig | grep 'inet 192'| awk '{ print }'

мое текущее решение заключается в создании контейнеров с помощью Docker Machine (виртуальной машины linux, которая доступна под другим IP-адресом) и маршрутизации всего трафика контейнеров на VM docker machine.

sudo route -n add -net 172.18.0.0/16 192.168.99.100

вы можете получить сетевой диапазон ваших контейнеров docker, используя docker inspect и IP-адрес вашей виртуальной машины docker с помощью docker-machine ip


другой обходной путь-использовать sudo ifconfig lo0 alias 172.17.0.1 таким образом, вы все еще можете использовать тот же статический IP-адрес (если ваши коллеги на базе Linux или скрипты bash настаивают на его использовании).