Docker容器发送空的响应

希望有人能告诉我我失踪了什么? 这是一个使用webrick的ruby应用程序,我正在尝试Containerize应用程序。 在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"] 

这是如何构build图像

 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. 

validation服务器已启动:

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

现在在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 

validation过程

 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 

这是一个应用程序的问题?

看起来像Jekyll绑定到本地主机。 或者像这样启动容器:

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

或者把Jekyll绑定到0.0.0.0

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