2017-01-31 2 views
3

En espérant que quelqu'un puisse me dire ce que je manque? C'est une application de ruby ​​utilisant webrick et j'essaye de conteneuriser l'application. En cours d'exécution sur Mac OSX 10.12.3 Sierra. Voici mon DockerfileConteneur Docker envoyant des réponses vides

FROM ruby:2.4.0-alpine 
RUN apk add --no-cache gcc musl-dev libstdc++ g++ make 
RUN gem install jekyll bundler redcarpet 
RUN mkdir -p /usr/app/jekyll 
COPY . /usr/app/jekyll 
WORKDIR /usr/app/jekyll 
EXPOSE 4000:4000 
CMD ["jekyll", "serve"] 

Voici comment l'image est construite

docker build -t chb0docker/cheat . 

si je lance le service directement sur l'hôte, il fonctionne très bien

Violas-MacBook-Pro:progfun-wiki cbongiorno$ jekyll serve & 
[1] 49286 
Violas-MacBook-Pro:progfun-wiki cbongiorno$ Configuration file: /Users/cbongiorno/development/progfun-wiki/_config.yml 
Configuration file: /Users/cbongiorno/development/progfun-wiki/_config.yml 
      Source: /Users/cbongiorno/development/progfun-wiki 
     Destination: /Users/cbongiorno/development/progfun-wiki/_site 
Incremental build: disabled. Enable with --incremental 
     Generating... 
        done in 0.409 seconds. 
Auto-regeneration: enabled for '/Users/cbongiorno/development/progfun-wiki' 
Configuration file: /Users/cbongiorno/development/progfun-wiki/_config.yml 
    Server address: http://127.0.0.1:4000/ 
    Server running... press ctrl-c to stop. 

vérifier que le serveur est :

Violas-MacBook-Pro:progfun-wiki cbongiorno$ curl localhost:4000 2> /dev/null | wc -l 
     40 

maintenant exécutez-le dans docker:

Violas-MacBook-Pro:progfun-wiki cbongiorno$ fg 
jekyll serve 
^C 
Violas-MacBook-Pro:progfun-wiki cbongiorno$ docker run -d --name jekyll -p 4000:4000 chb0docker/cheat 
e766e4acb007033583885b1a3c52dc3c2dc51c6929c8466f3a4ff958f76ebc5f 

vérifier le processus

Violas-MacBook-Pro:progfun-wiki cbongiorno$ docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS     NAMES 
e766e4acb007  chb0docker/cheat "jekyll serve"  19 minutes ago  Up 32 seconds  0.0.0.0:4000->4000/tcp jekyll 
Violas-MacBook-Pro:progfun-wiki cbongiorno$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' jekyll 
172.17.0.3 
Violas-MacBook-Pro:progfun-wiki cbongiorno$ docker logs jekyll 
Configuration file: /usr/app/jekyll/_config.yml 
Configuration file: /usr/app/jekyll/_config.yml 
      Source: /usr/app/jekyll 
     Destination: /usr/app/jekyll/_site 
Incremental build: disabled. Enable with --incremental 
     Generating... 
        done in 0.329 seconds. 
Auto-regeneration: enabled for '/usr/app/jekyll' 
Configuration file: /usr/app/jekyll/_config.yml 
    Server address: http://127.0.0.1:4000/ 
    Server running... press ctrl-c to stop. 

maintenant essayer et obtenir des données

Violas-MacBook-Pro:progfun-wiki cbongiorno$ curl localhost:4000 2> /dev/null | wc -l 
     0 
Violas-MacBook-Pro:progfun-wiki cbongiorno$ curl 172.17.0.3:4000 2> /dev/null | wc -l 
     0 
Violas-MacBook-Pro:progfun-wiki cbongiorno$ curl 0.0.0.0:4000 2> /dev/null | wc -l 
     0 

mais, si nous exécutons l'EEG ci-dessus (avec wget au lieu de curl parce que ce n'est pas installé sur ce conteneur) nous pouvons voir tout est bien à l'intérieur du conteneur

docker exec -it jekyll /usr/bin/wget -q -O - localhost:4000 | wc -l 
     40 

Est-ce un problème d'application?

Répondre

4

On dirait que Jekyll se lie à localhost. Soit il faut lancer le récipient comme ceci:

docker run -d --name jekyll -p 127.0.0.1:4000:4000 

Ou ont Jekyll se lient à 0.0.0.0:

CMD ["jekyll", "serve", "--host", "0.0.0.0"] 
+0

C'est exactement ce que je pensais! La question était "que faire à ce sujet" - je suis allé avec l'option 2 car elle rend l'image complètement portable et personne ne doit savoir quoi que ce soit de plus pour l'exécuter. –