Подключитесь к докер-машине, используя "localhost"

Есть определенные функции, такие как рабочие службы JavaScript без https, которые работают только на localhost, но когда я запускаю свое приложение внутри контейнера докеров, используя docker-compose, который работает поверх докер-машины, мне нужно подключиться к нему, используя адрес, который я получаю от

docker-machine ip default

Есть ли способ сопоставить localhost с тем, что ip?

Ответ 1

Вы можете добавить порт VirtualBox для сопоставления порта на хосте докера на локальном компьютере.

Предполагая, что ваша докерная машина называется "по умолчанию", и вы хотите сопоставить порт 80 в своем контейнере с localhost: 8888, вы можете запустить:

vboxmanage modifyvm default --natpf1 "nameformapping,tcp,,8888,,80"

или если VM работает

vboxmanage controlvm default natpf1 "nameformapping,tcp,,8888,,80"

Это также можно сделать в интерфейсе VirtualBox в настройках виртуальной машины. Вот документ из VirtualBox https://www.virtualbox.org/manual/ch06.html#network_nat

Вам также понадобится сопоставить порт на вашем контейнере с портом на докере, вы это сделаете при запуске контейнера (это также предполагает, что у вас есть команда "EXPOSE 80" в вашем Dockerfile

docker run -p 80:80 mycontainer

https://docs.docker.com/engine/reference/run/

Смотрите также: https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

Ответ 2

Редактирование вашего файла hosts приводит к тому, что ваш локальный компьютер смотрит только на IP-адрес, указанный для домена. Таким образом, вы можете добавить ip-адрес файла docker-machine в файл etc\hosts на вашем локальном компьютере и сопоставить порт 80 в контейнере с портом 80 на docker-machine.

Пример:

1) Получить IP-адрес хост-хоста

$ docker-machine ip default
192.168.99.100

2) Добавьте эту строку в файл etc/hosts на вашем локальном компьютере

192.168.99.100 domain.com

3) Убедитесь, что ваш компьютер разрешает домен.

$ ping domain.com
PING domain.com (192.168.99.100): 56 data bytes
64 bytes from 192.168.99.100: icmp_seq=0 ttl=64 time=0.294 ms
64 bytes from 192.168.99.100: icmp_seq=1 ttl=64 time=0.437 ms
64 bytes from 192.168.99.100: icmp_seq=2 ttl=64 time=0.556 ms
64 bytes from 192.168.99.100: icmp_seq=3 ttl=64 time=0.270 ms

Примечания:

  • Для пользователей Windows файл hosts локализован в C:\Windows\System32\Drivers\etc\hosts
  • Если вы хотите поддерживать несколько доменов только в одной докере-машине, вы можете создать прокси-контейнер с nginx внутри других ваших контейнеров.

Ответ 3

Самый простой способ - пересылка порта из VBox

Настройки- > Сеть- > Адаптер 1- > Перенаправление портов

затем добавьте Name, в хосте добавьте 127.0.0.1 (для локального хоста), затем соответствующие привязки портов и перезапустите виртуальную машину.

введите описание изображения здесь