2015-08-17 4 views
11

Я новенькая докер, и я пытаюсь следовать этому узел расслоения плотного учебнику, который они перечислили: https://docs.docker.com/examples/nodejs_web_app/Docker Node JS Установка

Я следую за этот уроком, и все вроде отлично работают до тех пор, навеска и я могу 't завивать к указанному порту.

$ curl -i localhost:49160 
curl: (7) Failed to connect to localhost port 49160: Connection refused 

$ docker ps 
CONTAINER ID  IMAGE       COMMAND    CREATED    STATUS    PORTS      NAMES 
21e727bc5a7d  username/docker-test "node /src/index.js" 13 minutes ago  Up 13 minutes  0.0.0.0:49160->8080/tcp gloomy_heisenberg 
$ docker logs 21e727bc5a7d 
Running on localhost:8080 

$ docker exec -it 21e727bc5a7d bash 
[[email protected] /]# netstat -tulpn 
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1/node' 

Не уверен, что я запутался в чем-то или как устранить это, любые идеи?

+1

Вы используете его в Linux или boot2docker? – R0MANARMY

+0

@ R0MANARMY Я запускаю установку на своем mac и следую инструкциям в ссылке verbatim. Он запускается поверх изображения centos. Не уверен, ответил ли я на ваш вопрос, но, как я уже сказал, я совершенно новичок в докеров, поэтому я могу смутить многие вещи, связанные с ним. Никогда не запускал никаких команд boot2docker, а также знал, что я что-то запускаю на виртуальном боксе. Виртуальный бокс говорит, что ОС - это Linux, но упоминает boot2docker в SATA-порту. – user1200387

+0

Похоже, что boo2docker неправильно перенаправляет запросы 'localhost' к док-станции vm. Вы можете подтвердить, что, получив IP-адрес boo2docker vm из виртуального окна и попытавшись получить доступ к веб-узлу узла на * http: // : 49160 *. Если вы получите ответ, то именно локальный хост не будет перенаправлен на вашу виртуальную машину, если нет, то это что-то еще. – R0MANARMY

ответ

9

Это решение:

  1. Run вам приложения, как это:

    docker run --rm -i -t -p 49160:8080 <your username>/centos-node-hello

    Выходной сигнал должен прийти говоря прослушивает порт 8080. Это означает, что приложение работает

  2. Открыть еще один терминал CLI докера и введите:

    docker-machine ls

    Вы увидите и IP-адрес и порт. Пример: 192.168.99.100:<some-number>

  3. Перейдите в браузер и введите IP-адрес и номер экспортируемого порта.

    В этом случае 192.168.99.100:49160, и ваш сайт должен быть включен.

Надеюсь, это поможет.

+0

В вашем случае ваша команда будет docker run --rm -i -t -p 49160: 8080 имя пользователя/докер-тест –

+0

Что еще я могу сделать, если это не решит мою проблему? Есть ли что-то в самом узле-приложении, которое я сделал неправильно? – PDXIII

2

Я могу рассказать вам, как устранить эту проблему как минимум.

Сначала проверьте журналы, для этого вам понадобится идентификатор контейнера. Вы получаете идентификатор контейнера, используя docker ps

Запустить docker <id> logs для просмотра журналов. Возможно, ваша команда вернула ошибку.

Если вы хотите поближе познакомиться, вы можете запустить оболочку BASH на контейнере. Запустите эту команду docker exec -it <id> bash, и это даст вам оболочку в контейнере для устранения неполадок. Оболочка - это тот же экземпляр контейнера, чтобы вы могли устранить неисправность работающего сервиса.

+0

Спасибо за ваш ответ, в журналах точно указано, что в учебнике сказано, что он будет «Выполняется на http: // localhost: 8080». Когда я вхожу в реальный контейнер и проверяю на наличие запущенных процессов, он выглядит корректно: [root @ 21e727bc5a7d /] # netstat -tulpn Активные подключения к Интернету (только серверы) Прото-реквизит Q-Q Адрес электронной почты Адрес локального адреса PID/Название программы tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1/node. Существуют ли какие-либо брандмауэры, которые могут вызывать проблемы? – user1200387

3

Если вы используете Mac OS X и установили докер с помощью докер Toolbox, вы можете использовать:

curl $(docker-machine ip default):49160 
2

Хит данную команду, чтобы найти IP-адрес из Докер-машины

$ docker-machine ls 

Выход будет как :

NAME  ACTIVE DRIVER  STATE  URL       SWARM DOCKER ERRORS 
default *  virtualbox Running tcp://192.168.99.100:2376   v1.10.3 

Теперь запустите приложение из главного компьютера в качестве :

$ curl -i 192.168.99.100:49160 
6

я испытал те же проблемы, и обнаружил, что это было связано с boot2docker не пересылает мой Localhost на виртуальную машину, на которой работает Docker.

Узнайте IP виртуальной машины работает докер так:

$ boot2docker ip 

Вы увидите выход, как:

$ 192.168.99.102 

И с распечаткой это дает вам, завивать указанный порт это IP. Например:

$ curl -i 192.168.99.102:49160