Docker,无法使用docker flag -p 3000:3000从localhost:3000进行“rails server”开发

我试图使用docker与铁路,build立一个容器内的整个堆栈。 我的目标是有一个nginx / memcached /独angular兽/ rails / postgres堆栈作为进程pipe理器的runit。 到目前为止,我已经安装了我的app,ruby和postgres。 在这一点上,我试图在移动到nginx / memcached / unicorn之前testing一切是否正常工作。
这是我的dockerfile:

FROM ubuntu:trusty ADD . /app # Update repos RUN apt-get update # General RUN apt-get install -y git curl software-properties-common python-software-properties ssh # Install ruby (taken from https://gist.github.com/konklone/6662393) RUN \curl -Lk https://get.rvm.io | bash -s stable RUN /bin/bash -l -c "rvm requirements" RUN /bin/bash -l -c "rvm install 2.1.1" ENV PATH /usr/local/rvm/gems/ruby-2.1.1/bin:/usr/local/rvm/rubies/ruby-2.1.1/bin:$PATH RUN gem install bundler --no-ri --no-rdoc # Install nodejs (rails js runtime) RUN apt-get install -y nodejs # Install postgresql (adapted from https://wiki.postgresql.org/wiki/Apt) RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -sc)-pgdg main" RUN curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - RUN apt-get update RUN apt-get install -y postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3 # Setup postgresql RUN mkdir /pgsql && chown postgres /pgsql USER postgres ENV PATH $PATH:/usr/lib/postgresql/9.3/bin/ RUN initdb -E UTF8 -D /pgsql/data USER root # Needed for pg gem (from http://stackoverflow.com/a/20754173) RUN apt-get install -y libpq-dev 

然后我用下面的命令创build一个容器

 docker run -it -p 3000:3000 *dockerfile_image* /bin/bash -l 

在那个容器里面,我将postgresql设置为后台作业并运行rails

 $ sudo -u postgres /usr/lib/postgresql/9.3/bin/postgres -D /pgsql/data ^z $ bg $ sudo -u postgres /usr/bin/psql -c "create role *appname* login createdb" $ cd /app $ bundle && rake db:create db:migrate $ rails s => Booting WEBrick => Rails 4.1.0 application starting in development on http://0.0.0.0:3000 => Run `rails server -h` for more startup options => Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option) => Ctrl-C to shutdown server .... 

但正如标题所述,我无法从localhost:3000连接。 我也试过了

  • 试图从0.0.0.0:3000连接
  • 留下-p 3000:3000并尝试从container_ip :3000连接
  • 在dockerfile中EXPOSE 3000,使用docker ps查找映射的端口并尝试localhost: mapped_port

此外,我不知道是否重要,但我在OSX上使用boot2docker。

这实际上是由boot2docker造成的。 有关详细信息,请参阅此页面: https : //github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

TLDR

Portforwarding目前只能在boot2docker上使用。 您需要运行以下命令(并保持运行):

 boot2docker ssh -L 8080:localhost:80 

其中80是容器上的暴露端口,8080是您希望从主机上访问它的端口。