Докер доступа с внешней машины в сети
можно ли получить доступ к службе 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) из контейнера