2014-05-02 11 views
6

Sto provando ad utilizzare la finestra mobile con i binari, creando un intero stack all'interno di un contenitore. Il mio endgoal è avere uno stack nginx/memcached/unicorn/rails/postgres con runit come process manager. Finora ho installato la mia app, ruby ​​e postgres. A questo punto sto provando a verificare se tutto funziona correttamente prima di passare a nginx/memcached/unicorn.
Ecco la mia dockerfile:Docker, impossibile raggiungere lo sviluppo "rails server" da localhost: 3000 utilizzando la finestra mobile flag -p 3000: 3000

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 

Poi creare un contenitore con il seguente comando

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

All'interno di quel contenitore Ho messo su PostgreSQL come processo in background e le rotaie di esecuzione s

$ 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 
.... 

Ma come afferma il titolo, non riesco a connettermi da localhost: 3000. Ho anche provato

  • cercando di connettersi da 0.0.0.0:3000
  • lasciando il -p 3000: 3000 e cercando di connettersi da container_ip: 3000
  • ESPORRE 3000 nella dockerfile, utilizzando finestra mobile ps per trovare la porta mappata e cercando localhost: mapped_port

anche io non so se è importante, ma sto usando boot2docker su OSX.

+0

Vedere anche http://stackoverflow.com/a/29303930/6309 – VonC

risposta

12

Questo in realtà è stato causato da boot2docker. Vedere questa pagina per maggiori informazioni: https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

TLDR

portforwarding funziona solo con un hack su boot2docker attualmente. È necessario eseguire il seguente comando (e tenerlo in funzione):

boot2docker ssh -L 8080:localhost:80 

dove 80 è la porta esposto sul contenitore e 8080 è la porta che si desidera accedervi da sul vostro ospite.

+2

Questo non funziona più, con la finestra mobile. Qualcuno sa come appare la chiamata corretta per la finestra mobile? Suggerimento: -L non funziona con ssh della finestra mobile. –