Доступ к apache2, находящемуся внутри контейнера Docker, из веб-браузера хост-машины

Я создавал веб-сервер как контейнер Docker и пытался получить к нему доступ вне контейнера. Но я не могу. Что я делаю.

-Вытягивание образа ubuntu:

docker pull ubuntu:14.04

-Запуск контейнера:

docker -t -i -p 49200:2375 [image-id]

и после установки apache2 во вновь запущенный контейнер я могу пропинговать сервер apache2 внутри контейнера, я также могу выполнить curl и увидеть результаты в контейнерном терминале, но не повезло снаружи на хост-компьютере. Я пробовал много раз. (Я использую Virtual Box на Windows)

Скриншоты:

docker 1

docker 2

Вопросы:

  1. Использую ли я правильные команды докера и номера портов для создания контейнера.
  2. Что-то не так в конфигурации apache. (Я использую apache в режиме по умолчанию без каких-либо настроек)
  3. Что-то не так с портами на моем виртуальном ящике или на моем компьютере? Я очень плохо разбираюсь в сетях.

Может кто поможет!!!


person h_a86    schedule 26.07.2014    source источник
comment
Apache обычно обслуживает файл через порт 80. Вы не указали это в сопоставлении портов. Может быть, это не так просто...   -  person Mark O'Connor    schedule 26.07.2014
comment
Спасибо за ответ. Итак, вы говорите, что мне нужно открыть порт 80 из контейнера докеров, а также добавить порт 80 в виртуальную коробку.   -  person h_a86    schedule 26.07.2014
comment
после добавления порта 80 в Virtual Box и сопоставления этого порта с контейнером Docker я могу получить результаты в своем браузере, но с этим ip 127.0.0.1, а не с 172.17.0.7. Не могли бы вы объяснить, почему он недоступен по адресу 172.17.0.7?   -  person h_a86    schedule 26.07.2014
comment
Виртуальная среда внутри виртуальной среды. 172.17.0.7 — это сетевой интерфейс виртуального бокса ОС Linux.   -  person Mark O'Connor    schedule 26.07.2014


Ответы (1)


Проблема 1: порт Apache по умолчанию

2375 порт не является портом по умолчанию для apache, это порт по умолчанию для демона docker, команда должна быть

docker -t -i -p 49200:80 [image-id]

Проблема 2: порт на другой машине

49200:80 Это сопоставление внутреннего порта 80 с хостом докера 49200, хостом докера на самом деле является ваша виртуальная машина (предположительно, это ваша оболочка boot2docker)

В виртуальной консоли виртуальной машины вы можете

curl localhost:49200

Картинка «Правила переадресации портов» помогает переадресовать ваш порт на ваш хост виртуального бокса, для вас это MacOS, где вы также сопоставили 49200 с MacOS 49200

Таким образом, в консоли оболочки MacOS вы также можете

curl localhost:49200

Если вы знаете IP-адрес виртуальной машины (узла докера), например, это 192.168.59.103 по умолчанию для boot2docker, то вы можете

curl 192.168.59.103:49200

Если вы хотите получить доступ к контейнеру докеров apache через 172.17.0.7, помните, что это частная сеть внутри, вам нужно запустить другой контейнер, например

docker -t -i busybox bash
# curl 172.17.0.7:80

Резюме

docker -p — это порт, перенаправляющий ваш внутренний порт на узел докера. «Правила переадресации портов» в настройках виртуального бокса — это порт, перенаправляющий ваш порт виртуальной машины на узел виртуальной машины.

  • Докер-контейнер Apache: 172.17.0.7:80
  • хост-докер = виртуальная коробка ВМ: 192.168.59.103:49200
  • хост виртуального бокса = MacOS: xxxx: 49200
person Larry Cai    schedule 07.08.2014