2016-09-08 6 views
2

У меня возникают проблемы с доступом к контейнеру-реактору, работающему с докер-компоновкой внутри докер-машины. Я могу скрутить веб-страницу внутри контейнера, но я не могу получить доступ к ней внутри докер-машины (или в браузере хоста, если на то пошло). Контейнер Golang для бэкэнда можно получить с докер-машины и из браузера хоста (как видно из фрагментов, он возвращает 404 не найден).«Пустой ответ от сервера» при попытке запустить webpack-dev-сервер внутри контейнера докера с помощью docker-compose на windows running docker-toolbox

В журналах составления докеров все работает бесперебойно, webpack-dev-server работает, как и ожидалось, я просто не могу получить к нему доступ извне контейнера.

Я использую панель инструментов для докеров для окон.

Лучше всего дополнительно описать проблему с некоторыми фрагментами.

Докер-Compose файла:

version: '2' 
services: 
    postgres: 
     image: postgres 
     environment: 
      - POSTGRES_PASSWORD=postgres 
    server: 
     build: ./server 
     command: gin 
     volumes: 
      - ./server:/go/src/app 
     ports: 
      - "8080:3000" 
     environment: 
      - POSTGRES_PASSWORD=postgres 
    client: 
     build: ./client 
     command: npm start 
     volumes: 
      - ./client:/usr/src/app 
      # mount node_modules as a workaround for it disappearing 
      # after adding /client as a mounted folder 
      - /usr/src/app/node_modules 
     ports: 
      - "9000:3000" 

Dockerfile для контейнера узла:

FROM node:6.5.0-slim 

RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

COPY package.json /usr/src/app/ 
ENV NODE_ENV development 
RUN npm install 

Выход из следующих команд внутри DOCKER-машины (по умолчанию):

докер @ по умолчанию: ~ $ Sudo Iptables -t нац -L -n

Chain PREROUTING (policy ACCEPT) 
target  prot opt source    destination 
DOCKER  all -- 0.0.0.0/0   0.0.0.0/0   ADDRTYPE match dst-type LOCAL 

Chain INPUT (policy ACCEPT) 
target  prot opt source    destination 

Chain OUTPUT (policy ACCEPT) 
target  prot opt source    destination 
DOCKER  all -- 0.0.0.0/0   !127.0.0.0/8   ADDRTYPE match dst-type LOCAL 

Chain POSTROUTING (policy ACCEPT) 
target  prot opt source    destination 
MASQUERADE all -- 172.17.0.0/16  0.0.0.0/0 
MASQUERADE all -- 172.19.0.0/16  0.0.0.0/0 
MASQUERADE all -- 172.18.0.0/16  0.0.0.0/0 
MASQUERADE tcp -- 172.19.0.2   172.19.0.2   tcp dpt:3000 
MASQUERADE tcp -- 172.19.0.3   172.19.0.3   tcp dpt:3000 

Chain DOCKER (2 references) 
target  prot opt source    destination 
RETURN  all -- 0.0.0.0/0   0.0.0.0/0 
RETURN  all -- 0.0.0.0/0   0.0.0.0/0 
RETURN  all -- 0.0.0.0/0   0.0.0.0/0 
DNAT  tcp -- 0.0.0.0/0   0.0.0.0/0   tcp dpt:8080 to:172.19.0.2:3000 
DNAT  tcp -- 0.0.0.0/0   0.0.0.0/0   tcp dpt:9000 to:172.19.0.3:3000 

вот главная проблема:

докер @ по умолчанию: ~ $ локон 0.0.0.0 : 9000

curl: (52) Empty reply from server 

докер @ DEFA ии: ~ $ локон 0.0.0.0:8080

404 page not found 

докер @ по умолчанию: ~ $ Докер пс

CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS 
      NAMES 
f93fd1833de2  goreacttodo_client "npm start"    32 minutes ago  Up 5 minutes  0.0.0.0:9000-> 
3000/tcp goreacttodo_client_1 
ff1fa9c33b05  postgres    "/docker-entrypoint.s" 3 days ago   Up 5 minutes  5432/tcp 
      goreacttodo_postgres_1 
e4581f8e368b  goreacttodo_server "gin"     3 days ago   Up 5 minutes  0.0.0.0:8080-> 
3000/tcp goreacttodo_server_1 

Выход из следующих команд внутри контейнера узла:

корень @ f93fd1833de2:/usr/src/app # curl localhost: 3000

<!doctype html> 
<html> 
<head> 
</head> 
<body lang="en"> 
<div id="react-app"></div> 
<script src="/bundle.js" type="text/javascript"></script> 
</body></html> 

Любая помощь будет очень восприимчивой.

ответ

7

Сервер разработки Webpack по умолчанию прослушивает только локальный хост.

Если вы хотите выставить это порт за пределами Докер контейнера вам нужно явно указать хост для прослушивания:

WebPack-DEV-сервер --host 0.0.0.0 --port 80