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是您希望从主机上访问它的端口。
- 在Mac OS X上从boot2docker迁移到Vagrant + NFS的最快方式是什么?
- docker集装箱之间redirect的最佳做法
- Docker Couchbase:无法使用入口点脚本中的curl连接到端口8091
- 如何从docker容器中访问boot2docker-ip
- Xdebug无法连接回到Docker主机
- 当使用docker run命令时,Docker容器退出(0),但使用docker start命令
- 我怎样才能debugging我的docker容器与phpStorm
- 对于由docker-machinepipe理的boot2docker虚拟机,复制或scp文件到/ var / lib / boot2docker
- 使用Boot2Docker直接访问容器