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

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

wget -d localhost:5000

Примечания, я запускаю этот контейнер, а также публикую порт снаружи командой:

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

Но на хосте докеров (это мой Mac и на котором запущен El Capitan) я открываю Chrome и перехожу по адресу localhost:5000. Не работает. Небольшое примечание: если я перейду на любой произвольный порт, например localhost:4000, я увижу сообщение об ошибке из Chrome, например:

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
Trần Kim Dự 27 Ноя 2016 в 11:53

2 ответа

Лучший ответ

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

В контейнере запустите команду:

ss -lntp

Если это выглядит так:

LISTEN  0   128   127.0.0.1:5000  *:*

Это означает, что ваше веб-приложение прослушивает только localhost, поэтому хост-контейнер не может получить доступ к вашему веб-приложению. Вы должны заставить свой сервер прослушивать интерфейс 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"
  }
6
Trần Kim Dự 27 Ноя 2016 в 15:04

У меня была эта проблема при использовании Docker для Mac при попытке запустить приложение Angular2.

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

 "scripts": {
    ...
    "start": "ng serve -H 0.0.0.0", # before, this was "start": "ng serve"
  }
1
maia 6 Июл 2017 в 23:28