2016-02-16 3 views
1

запускает Docker контейнер:соединения докера отказалось nodejs приложения

docker run --name node-arasaac -p 3000:3000 juanda/arasaac 

И мой Node.js приложение работает нормально.

Если я хочу изменить хост-порт:

docker run --name node-arasaac -p 8080:3000 juanda/arasaac 

Веб-страница не загружается, журналы из браузера консоли:

Failed to load resource: net::ERR_CONNECTION_REFUSED 
http://localhost:3000/app.318b21e9156114a4d93f.js Failed to load resource: net::ERR_CONNECTION_REFUSED 

мне нужно иметь один и тот же порт, как в хостом и контейнером Do ? Кажется, он знает, как разрешить http://localhost:8080, так что он загружает мой сайт, но внутренние ссылки на веб-странице идут в порт 3000, и это не так хорошо :-(

+0

Не уверен, что именно вы спрашиваете, но нет, вам не нужно, чтобы хост и контейнер имели один и тот же порт. Если внутренние ссылки доступа к вашему узлу apps на порту 3000, они могут продолжать делать это, если вы запускаете их в контейнерах в сети докеров. Это то, что вы имели ввиду? –

+0

Когда я меняю порт, внутренние внутренние ссылки (которые всегда идут на localhost: 3000) не работают. докерная сеть? Нужен ли мне дополнительный конфиг, который я не знаю? Я думал, что это было из коробки ... – user2670996

+0

Когда мой браузер пытается загрузить ресурсы в localhost: 3000, он не может, потому что он пытается сделать это на машине localhost, а не в контейнере. Я имею в виду, что он запрашивает запросы от 8080 до 3000, но когда запрос от 3000, он остается в хосте. – user2670996

ответ

1

Когда вы используете приложение node.js в контейнере докера, будет отображаться только внешние порты, которые вы назначаете с помощью команды -P. Первый экземпляр с параметром «-p 3000: 3000» отображает главный порт 3000 на порт 3000, который открывается из вашего контейнера докеров. Это обеспечивает от 1 до 1 так что любой клиент, который пытается подключиться к вашей службе node.js, может сделать это через порт HOST 3000.

Когда вы делаете «-p 8080: 3000», докер отображает порт хоста 8080 на node.js контейнерный порт 3000. Это означает, что любой клиент делает вызовы в ваше приложение node.js через хост (что означает не с в том же контейнере, что и ваше приложение node.js или нет из связанного или подключенного к сети контейнера докеров), необходимо будет сделать это через порт HOST 8080.

Итак, если у вас есть внешние службы, которые ожидают получить доступ к вашему node.js в порту 3000 они не смогут.

Смежные вопросы