Доклер доступа с внешней машины в сети
Возможно ли получить доступ к службе докеров с внешнего устройства?
Я построил сервис через fig и выставил порт 3000. Я использую fig с docker-osx, поэтому докер работает внутри виртуального бокса.
Теперь мне нужно получить доступ к службе, предоставляемой с внешнего устройства (то есть мобильного телефона или планшета).
В настоящий момент я могу получить доступ только к службе с localdocker: 3000 с компьютера, на котором размещен VirtualBox-Environment.
Ответы
Ответ 1
Вам нужно будет сообщить вашему локальному компьютеру прослушивать входящие соединения на этом порту, а затем перенаправить эти запросы в ваш контейнер докеров.
Nginx довольно хорош в этом и простая конфигурация вроде этого:
/etc/nginx/sites-enabled/your-file.conf
server {
listen 3000;
server_name YOUR_IP_ADDRESS;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
Будет работать нормально, если ваш телефон/планшет достигнет http://YOUR_IP_ADDRESS:3000/
Ответ 2
Для тех, кто использует OSX (и Windows) для тестирования, Docker создает виртуальную машину; это работает немного иначе, чем работает в Linux-системе.
Попробуйте следующее:
docker-machine ip
Это вернет IP-адрес виртуальной машины. В моем примере это
192.168.99.100
Запуск docker ps
покажет вам сопоставления портов (очистка таблицы ниже)
$ docker ps
CONTAINER ID IMAGE STATUS PORTS NAMES
42f88ac00e6f nginx-local Up 30 seconds 0.0.0.0:32778->80/tcp
0.0.0.0:32778->80/tcp
означает, что docker отображает 32778 (случайно назначенный порт) на моем компьютере (в данном случае виртуальную машину) в мой контейнерный порт 80.
Вы также можете получить эту информацию от docker port 42f88ac00e6f 80
(42f88ac00e6f - идентификатор или имя контейнера)
Чтобы получить доступ к nginx в контейнере, теперь я могу использовать виртуальную машину ip: 32778
http://192.168.99.100:32778/ будет перенаправляться на порт 80 порта докера (я использую это для локального тестирования)
Очевидно, что порт выше не будет доступен из сети, но вы можете настроить брандмауэр для его пересылки =)
Ответ 3
Я предлагаю добавить правило перенаправления портов к настройкам виртуальной машины VirtualBox.
Откройте настройки виртуальной машины = > Вкладка "Сеть" = > "Адаптер" 1. По умолчанию он подключен к NAT.
Нажмите кнопку "Переадресация порта", затем добавьте новое правило.
IP-адрес хоста должен быть вашим IP-адресом компьютера. Также может быть 127.0.0.1, но тогда это будет видно только на вашем компьютере.
Для значения порта хоста вам нужно будет немного поэкспериментировать - он должен быть как неиспользуемым, так и разрешенным брандмауэром компьютера.
Оставьте гостевой IP пустым.
Гостевой порт должен быть 3000, как в вашем вопросе.
После этого он должен быть доступен из локальной сети, адрес http://HOST_IP:HOST_PORT
Ответ 4
Вы должны иметь доступ к boot2docker vm, используя IP-адрес, сообщенный book2docker ip
.