2016-12-08 3 views
0

Я пытаюсь запустить приложение «Угловое 1.5» на своем Mac в пользовательском образе, созданном из официального изображения узла here, но при попытке получить доступ к сайт, запущенный внутри контейнера. Я могу запустить приложение «Угловое» локально на своем Mac без ошибок.«Соединение отказано» на контейнере узла-докера

Вот мой Dockerfile:

FROM  node 
COPY  . /var/www 
WORKDIR  /var/www 
RUN   npm install 
EXPOSE  8888 
ENTRYPOINT ["npm", "start"] 

В package.json, "NPM старт" установлен на раскрутить сайт на порт 8888:

"start": "http-server -a localhost -p 8888 -c-1 ./app", 

Я построил собственное изображение, как это :

$docker build -t beerdb-web . 

изображение строит успешно:

$docker images 
REPOSITORY   TAG     IMAGE ID   CREATED    SIZE 
beerdb-web   latest    cf406b4dacc7  13 minutes ago  760.6 MB 

Я затем запустить контейнер с изображения так:

$docker run -p 8888:8888 -d cf 

contaier, кажется, работает нормально и правильно отображающая контейнерный порт 8888 в Докер машины порт 8888:

$docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS     NAMES 
828aeb67bc73  cf     "npm start"   2 seconds ago  Up 2 seconds  0.0.0.0:8888->8888/tcp condescending_almeida 

Я могу осмотреть контейнер и посмотреть, что он имеет IP-адрес и порт 8888:

"NetworkSettings": { 
    "Bridge": "", 
    "SandboxID": "0d7180998a7c0bceb0c911069538f29297422fdf98bb859eba78e6584ce65919", 
    "HairpinMode": false, 
    "LinkLocalIPv6Address": "", 
    "LinkLocalIPv6PrefixLen": 0, 
    "Ports": { 
     "8888/tcp": [ 
      { 
       "HostIp": "0.0.0.0", 
       "HostPort": "8888" 
      } 
     ] 
    }, 
    "SandboxKey": "/var/run/docker/netns/0d7180998a7c", 
    "SecondaryIPAddresses": null, 
    "SecondaryIPv6Addresses": null, 
    "EndpointID": "99bc9f9fad5a2445687327d45fb4fe29fb8267b08f119d3912720ced48b7d074", 
    "Gateway": "172.17.0.1", 
    "GlobalIPv6Address": "", 
    "GlobalIPv6PrefixLen": 0, 
    "IPAddress": "172.17.0.2", 
    "IPPrefixLen": 16, 
    "IPv6Gateway": "", 
    "MacAddress": "02:42:ac:11:00:02", 
    "Networks": { 
     "bridge": { 
      "IPAMConfig": null, 
      "Links": null, 
      "Aliases": null, 
      "NetworkID": "41b55572b74543f33c99b3f86339ad4c81e9abaacbe0e92077f36cacae29a9c0", 
      "EndpointID": "99bc9f9fad5a2445687327d45fb4fe29fb8267b08f119d3912720ced48b7d074", 
      "Gateway": "172.17.0.1", 
      "IPAddress": "172.17.0.2", 
      "IPPrefixLen": 16, 
      "IPv6Gateway": "", 
      "GlobalIPv6Address": "", 
      "GlobalIPv6PrefixLen": 0, 
      "MacAddress": "02:42:ac:11:00:02" 
     } 
    } 
} 

Моя машина появляется отлично, а также:

$docker-machine ls 
NAME  ACTIVE DRIVER  STATE  URL       SWARM DOCKER ERRORS 
default *  virtualbox Running tcp://192.168.99.100:2376   v1.12.3 

Но когда я перейти к http://192.168.99.100:8888/ от моего Mac я получаю «Connection Отказался».

В нижеприведенном фрагменте у меня есть ssh'd в докер-машине. Вы увидите, что я могу пинговать IP-адрес контейнера, но когда я использую локон, чтобы попытаться ударить порт 8888 я получаю отказ в соединении:

$docker-machine ssh 
         ##   . 
        ## ## ##  == 
       ## ## ## ## ## === 
      /"""""""""""""""""\___/ === 
     ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~/===- ~~~ 
      \______ o   __/ 
      \ \   __/ 
       \____\_______/ 
_     _ ____  _   _ 
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __ 
| '_ \/_ \/_ \| __| __)/_` |/ _ \/__| |//_ \ '__| 
| |_) | (_) | (_) | |_/__/ (_| | (_) | (__| < __/ | 
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_| 
Boot2Docker version 1.12.3, build HEAD : 7fc7575 - Thu Oct 27 17:23:17 UTC 2016 
Docker version 1.12.3, build 6b644ec 
[email protected]:~$ ping 172.17.0.2 
PING 172.17.0.2 (172.17.0.2): 56 data bytes 
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.092 ms 
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.092 ms 
^C 
--- 172.17.0.2 ping statistics --- 
2 packets transmitted, 2 packets received, 0% packet loss 
round-trip min/avg/max = 0.092/0.092/0.092 ms 
[email protected]:~$ 
[email protected]:~$ curl 172.17.0.2:8888 
curl: (7) Failed to connect to 172.17.0.2 port 8888: Connection refused 
[email protected]:~$ 

Для того, чтобы убедиться, что сайт работает должным образом в контейнере I запустил командную строку в контейнер и использовал завиток, чтобы поразить localhost: 8888, и домашняя страница моего веб-сайта была возвращена.

Я считаю, что пользовательское изображение построено правильно из базового образа узла и что оно функционирует должным образом. Я считаю, что проблема связана либо с отображением портов, либо с самой машиной. У меня есть базовая установка инструментария Docker на моем Mac и никаких изменений в машине по умолчанию, работающей внутри VirtualBox, не внесены, но я все еще не могу получить доступ к веб-сайту, запущенному внутри моего контейнера.

Очень расстроенный, любая помощь приветствуется.

ответ

2

-a localhost переключатель в командной строке http-server заставляет сервер HTTP, чтобы связать себя устройство кольцевой проверки контейнера (127.0.0.1). Поскольку в контейнере используется другой network namespace, чем хост (ваша машина Docker), 127.0.0.1 в контейнере не равен 127.0.0.1 на хосте.

Для того, чтобы быть доступными из других сетевых интерфейсов, связываться со всеми доступными интерфейсами, указав 0.0.0.0 как Связующий адрес (-a 0.0.0.0, который по совпадению также является значением по умолчанию для этого параметра, что позволяет полностью опустить его):

"start": "http-server -p 8888 -c-1 ./app", 
+0

Это исправлено - удалено-localhost с 0.0.0.0 по умолчанию, как вы упомянули. –

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