2014-05-02 16 views
6

Tôi đang cố gắng sử dụng docker với đường ray, xây dựng toàn bộ ngăn xếp bên trong một thùng chứa. Endgoal của tôi là để có một nginx/memcached/unicorn/rails/postgres stack với runit như người quản lý quá trình. Cho đến nay tôi đã cài đặt ứng dụng, ruby ​​và postgres của mình. Tại thời điểm này tôi đang cố gắng để kiểm tra nếu mọi thứ đang hoạt động chính xác trước khi tôi chuyển sang nginx/memcached/unicorn.
Dưới đây là dockerfile tôi:Docker, không thể tiếp cận "rails server" phát triển từ localhost: 3000 sử dụng docker 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 

Sau đó, tôi tạo ra một container với lệnh sau đây

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

Bên trong của container mà tôi thiết lập postgresql như một công việc nền và chạy đường ray 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 
.... 

Nhưng như các trạng thái tiêu đề, tôi không thể kết nối từ localhost: 3000. Tôi cũng đã thử

  • cố gắng kết nối từ 0.0.0.0:3000
  • rời -p 3000: 3000 và cố gắng để kết nối từ container_ip: 3000
  • lộ 3000 trong dockerfile, sử dụng Docker ps để tìm ra cổng lập bản đồ và cố gắng localhost: mapped_port

Ngoài ra tôi không biết nếu nó quan trọng nhưng tôi đang sử dụng boot2docker trên OSX.

+0

Xem thêm http://stackoverflow.com/a/29303930/6309 – VonC

Trả lời

12

Điều này thực sự do boot2docker gây ra. Xem trang này để biết thêm: https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

TLDR

chỉ Portforwarding làm việc với một hack trên boot2docker hiện. Bạn cần phải chạy lệnh sau đây (và giữ cho nó chạy):

boot2docker ssh -L 8080:localhost:80 

đâu 80 là cổng tiếp xúc trên thùng và 8080 là cổng bạn muốn truy cập nó từ trên máy chủ của bạn.

+2

Tính năng này không còn hoạt động nữa, với máy ủi. Có ai biết những gì các cuộc gọi chính xác trông giống như cho docker-máy? Gợi ý: -L không hoạt động với ssh. –

Các vấn đề liên quan