2016-11-27 2 views
4

Я использую Docker for Mac. У меня есть контейнер, который запускает сервер, например, мой сервер работает на порту 5000. Я выставил этот порт на DockerfileДокер: не удается открыть порт из контейнера в хост

Когда мой контейнер запущен, я подключаюсь к этому контейнеру и проверяю и работает ли этот сервер или не работает под командой и увидеть, что она возвращает данные (кучу HTML и JavaScript)

wget -d localhost:5000 

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

docker run -d -p 5000:5000 <docker_image_name> 

Но в докер host (мой mac и работает E l Capitan), я открываю хром и перехожу по адресу localhost:5000. Это не работает. Просто записочку, если я пойду в любой произвольный порт, такой как localhost:4000 я вижу сообщение об ошибке из хрома, таких как:

This site can’t be reached 
localhost refused to connect. 

Но сообщение об ошибке для localhost:5000 является:

The localhost page isn’t working 
localhost didn’t send any data. 

Так что, кажется, у меня есть настроенная работа «немного», но что-то не так. Скажите, пожалуйста, как это исправить.

ответ

6

Проверьте, что программа в контейнере прослушивает интерфейс 0.0.0.0.

В контейнере, выполните команду:

ss -lntp 

Если он появляется как:

LISTEN 0 128 127.0.0.1:5000 *:* 

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

Например, если ваш сервер nodejs приложение:

var app = connect().use(connect.static('public')).listen(5000, "0.0.0.0"); 

Если ваш сервер веб-пакет:

"scripts": { 
    "dev": "webpack-dev-server --host 0.0.0.0 --port 5000 --progress" 
    } 
+0

спасибо: D это работает :) –

+0

VUA upvote чо Cuong :) –

+0

После нескольких часов поиска, ваш ответ спас меня. Благодаря! – Lebul

1

Я имел эту проблему с помощью Docker для Mac, пытается запустить приложение Angular2.

Я исправил проблему, изменив мою package.json к

"scripts": { 
    ... 
    "start": "ng serve -H 0.0.0.0", # before, this was "start": "ng serve" 
    } 
Смежные вопросы