Доклер доступа с внешней машины в сети

Возможно ли получить доступ к службе докеров с внешнего устройства? Я построил сервис через 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.