2017-05-31 21 views
3

私はDockerを初めて使用し、デモ用Railsアプリケーションを作成しようとしています。ドッカーコンテナによるERR_CONNECTION_REFUSED

FROM ruby:2.2 

# Install apt based dependencies required to run Rails as 
# well as RubyGems. As the Ruby image itself is based on a 
# Debian image, we use apt-get to install those. 
RUN apt-get update && apt-get install -y \ 
    build-essential \ 
    nodejs 

# Configure the main working directory. This is the base 
# directory used in any further RUN, COPY, and ENTRYPOINT 
# commands. 
RUN mkdir -p /app 
WORKDIR /app 

# Copy the Gemfile as well as the Gemfile.lock and install 
# the RubyGems. This is a separate step so the dependencies 
# will be cached unless changes to one of those two files 
# are made. 
COPY Gemfile Gemfile.lock ./ 
RUN gem install bundler && bundle install --jobs 20 --retry 5 

# Copy the main application. 
COPY . ./ 

# Expose port 3000 to the Docker host, so we can access it 
# from the outside. 
EXPOSE 3000 

# The main command to run when the container starts. Also 
# tell the Rails dev server to bind to all interfaces by 
# default. 
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"] 

が、私はそれ(エラーなし)を建て:

docker build -t demo . 

し、それを実行します(また、エラーなし):

docker run -itP demo 
=> Booting Puma 
=> Rails 5.1.1 application starting in development on http://0.0.0.0:3000 
=> Run `rails server -h` for more startup options 
Puma starting in single mode... 
* Version 3.8.2 (ruby 2.2.7-p470), codename: Sassy Salamander 
* Min threads: 5, max threads: 5 
* Environment: development 
* Listening on tcp://0.0.0.0:9292 
Use Ctrl-C to stop 

私はこのようになりますdockerfileを作りました別の端末でdocker psコマンドを実行してポートを確認すると、次のようになります。

CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS      NAMES 
55e8224f7c15  demo    "bundle exec rails..." About an hour ago Up About an hour 0.0.0.0:32772->3000/tcp ecstatic_bohr 

ただし、Chromeを使用して、またはcurlコマンドを使用してhttp://localhost:32772またはhttp://192.168.99.100:32772に接続しようとすると、「接続が拒否されました」というメッセージが表示されます。

bundle exec rails serverコマンドでローカルマシンのドッカーの外にアプリケーションを実行すると正常に動作します。私のWin7マシンでDocker Toolboxを使用していることに注意してください。

どうしたらいいですか?

+0

ポート3000が公開されていますが、32772に到達しようとしていますか? –

+0

私はコンテナ内に3000を公開しています。これは私が収集したものから自分のlocalhostの32772にマッピングされます(少なくとも "0.0.0.0:32772-> 3000/tcp"は "docker ps"で表示されます) – Donald

+0

私は通常使っていますドッカーは私のドッカーファイルと一緒に、物事が自動化された一貫した方法で設定されていることを確認します。あなたのdockerファイルでは、 "ports"オプションを使い、ポートのようなことをします: "8000:8000"を左に8000はドッキングホスト、右に8000はドッカーコンテナーです。 – bkunzi01

答えて

0

私はhttp://<VM IP ADDRESS>:32772を使用していたworked--上記のトリックの組み合わせ(ローカルホスト:32772は動作しませんでした)、と私は9292.

のTCPリスニングポートを一致させるために私さらさポートを修正しなければなりませんでした

TCPリスニングポートが3000ではなく9292にデフォルト設定されている理由はまだ分かりませんが、別途検討します。

ありがとうございました!

1

私はこれにも数時間を費やしており、このthreadは本当に役に立ちました。私が今やっていることは、VMのIPアドレスからそれらのサービスにアクセスすることです。

あなたのVMのアドレスランニングを取得することができます。

http://<VM IP ADDRESS>:32772 

・ホープ、このことができます:

docker-machine ls 

、ホストを使用してサービスにアクセスしようとするが、このような何かを、ポート37772をマッピングされました。

+0

これを試してみました - "docker-machine ls"は私にURLを与えます"tcp://192.168.99.100:2376"。しかし、私が私のアドレスバーの "http://192.168.99.100:32772"に行くと、私はまだ同じエラーが発生します! – Donald

+1

私はDockerfileのポート3000を公開しているのを見ましたが、あなたのサービスはポート9292でリッスンしているようです。 – elvin

関連する問題