2017-01-31 3 views
3

Надеясь, что кто-то скажет мне, что мне не хватает? Это приложение ruby, использующее webrick, и я пытаюсь контейнеризовать приложение. Работает на Mac OSX 10.12.3 Sierra. Вот мой DockerfileДокерный контейнер, отправляющий пустые ответы

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"] 

Вот как изображение строится

docker build -t chb0docker/cheat . 

если я запустить службу непосредственно на хосте, он прекрасно работает

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. 

проверить сервер работает :

сейчас запустить его в докер:

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 

проверить процесс

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. 

теперь попробуйте и получить некоторые данные

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 

, но, если мы выполняем выше GET (с wget вместо curl, потому что это не установленный на этом контейнере), мы видим, что все хорошо внутри контейнера

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

Это проблема с приложением?

ответ

4

Похоже, что Jekyll привязан к локальному хосту. Либо запустить контейнер, как это:

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

Или Джекил связываются с 0.0.0.0:

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

Это именно то, что я подозревал! Вопрос состоял в том, «что с этим делать» - я пошел с вариантом 2, поскольку он делает изображение полностью переносимым, и никто не должен знать ничего лишнего, чтобы его запустить. –

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