7

レールで docker を使用して、1 つのコンテナー内にスタック全体を構築しようとしています。私の最終目標は、プロセス マネージャーとして runit を使用して nginx/memcached/unicorn/rails/postgres スタックを作成することです。これまでのところ、アプリ、Ruby、および postgres がインストールされています。この時点で、nginx/memcached/unicorn に移る前に、すべてが正しく機能しているかどうかをテストしようとしています。
これが私の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

次に、次のコマンドでコンテナを作成します

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

そのコンテナ内でバックグラウンド ジョブとして postgresql をセットアップし、rails 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
....

しかし、タイトルの通り、localhost:3000から接続できません。私も試してみました

  • 0.0.0.0:3000 から接続しようとしています
  • -p 3000:3000 を残して、 container_ip :3000から接続しようとしています
  • dockerfile で 3000 を公開し、docker ps を使用してマップされたポートを見つけ、localhost を試行します

また、それが問題かどうかはわかりませんが、OSXでboot2dockerを使用しています。

4

1 に答える 1

12

これは実際には boot2docker が原因でした。詳細については、このページを参照してください: https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

TLDR

ポート転送は現在、boot2docker のハックでのみ機能します。次のコマンドを実行する必要があります (実行し続ける必要があります)。

boot2docker ssh -L 8080:localhost:80

80 はコンテナーで公開されているポートで、8080 はホストでアクセスするポートです。

于 2014-05-02T10:10:10.570 に答える