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

можно ли получить доступ к службе docker с внешнего устройства? Я построил сервис через fig и выставил порт 3000. Я использую fig с docker-osx, поэтому docker работает внутри virtualbox.

теперь мне нужно получить доступ к услуге предоставляется с внешнего устройства (например, мобильного телефона или планшета).

на данный момент я мог получить доступ к сервису только с localdocker:3000 с компьютера, на котором размещена среда VirtualBox.

5 ответов


вам нужно будет сообщить локальному компьютеру, чтобы он прослушивал входящие соединения на этом порту, а затем перенаправлял эти запросы в контейнер docker.

nginx и довольно хорошо в этом, и простой конфигурации, как это:

/etc/nginx/сайты-включен / ваш-файл.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/


для тех, кто использует 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 означает, что докер отображает 32778 (случайно назначенный порт) на моей машине (в данном случае виртуальной машине) на порт 80 моего контейнера.

вы также можете получить эту информацию от docker port 42f88ac00e6f 80 (42f88ac00e6f-идентификатор или имя контейнера)

чтобы получить доступ к nginx в контейнере, теперь я могу использовать ip виртуальной машины: 32778

http://192.168.99.100:32778/ перешлет на порт 80 моего контейнера докера (я использую это для тестирования локально)

очевидно, что порт выше не будет быть доступным из сети, но вы можете настроить брандмауэр для пересылки на него=)


Я предлагаю добавить правило переадресации портов в настройки виртуальной машины VirtualBox.

откройте вкладку настройки виртуальной машины = > сеть = > адаптер 1. По умолчанию он прикреплен к NAT.
Нажмите кнопку переадресации портов, затем добавьте новое правило.
IP-адрес хоста должен быть IP-адресом вашего компьютера. Может быть также 127.0.0.1, но тогда это будет видно только на вашем компьютере.
Для значения порта Хоста вам нужно будет немного поэкспериментировать - должно быть как неиспользуемым, так и разрешенным компьютером брандмауэр.
Оставьте гостевой IP-адрес пустым.
Гостевой порт должен быть 3000, как и в вашем вопросе.

после этого, он должен быть доступен из локальной сети, адрес http://HOST_IP:HOST_PORT


вы должны иметь доступ к виртуальной машине boot2docker, используя IP-адрес, указанный book2docker ip.


для пользователей MacOs.

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