2016-09-08 1 views
2

J'ai des problèmes pour accéder à un conteneur de réaction exécuté avec docker-composer dans docker-machine. Je peux enrouler la page Web à l'intérieur du conteneur, mais je ne peux pas y accéder à l'intérieur de docker-machine (ou sur le navigateur de l'hôte d'ailleurs). Le conteneur Golang backend est accessible à partir de docker-machine et à partir du navigateur de l'hôte (comme vu dans les snippets, il renvoie un 404 non trouvé). Dans les journaux docker-composer, tout semble fonctionner correctement, webpack-dev-server fonctionne comme prévu, je ne peux pas y accéder depuis l'extérieur du conteneur. J'utilise la boîte à outils docker pour Windows."Réponse vide du serveur" lors de l'exécution de webpack-dev-server dans un conteneur docker avec docker-composer sur windows exécutable docker-toolbox

Il est préférable de décrire en plus le problème avec certains extraits.

fichier Docker-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 pour le conteneur de noeud:

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 

sortie des commandes suivantes à l'intérieur de docker-machine (par défaut):

docker par défaut @: ~ $ sudo iptables -t nat -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 

vient ici le problème principal:

défaut docker @: ~ curl $ 0.0.0.0 : 9000

curl: (52) Empty reply from server 

docker @ DEFA ult: ~ curl $ 0.0.0.0:8080

404 page not found 

défaut docker @: ~ docker $ ps

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 

sortie des commandes suivantes à l'intérieur du conteneur de noeud:

racine @ 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> 

Toute aide serait grandement appréciée.

Répondre

7

Le serveur de développement Webpack n'écoute par défaut que sur localhost.

Si vous voulez exposer le port est à l'extérieur du conteneur Docker vous devez spécifier explicitement hôte à écouter:

webpack-dev-server --host 0.0.0.0 --port 80