LoginSignup
0
0

More than 3 years have passed since last update.

docker上でRailsアプリを動かす際に、localhostでアクセスするためのオプション

Posted at

はじめに

学習環境を用意するにおいて、コンテナ上に開発環境が用意できることで、

・ホストPCを汚すことなく環境を構築できる
・異なるPC間で同じ環境を使いまわせる
・格好いいと感じる

といった理由からRailsアプリをコンテナ上で作って動かしてみましたが、ホストからの動作確認で引っかかったのでメモします。
※動かしたのはscaffoldレベルのアプリです

先にまとめ

先に問題と解決をまとめて書いておきます

  • 問題
    • コンテナ内で起動したRailsアプリにホストからアクセスできない
  • 解決方法
    • Railsアプリを立ち上げる際に、-b 0.0.0.0をオプションとしてつける

以下、やったこと

まとめにたどり着くまでの状況をつらつらと

準備

ポートフォワードの設定をしてコンテナを立ち上げる

(ホスト)$ docker container run -it -p 30000:3000 /bin/bash

コンテナ内でアプリを作る

(コンテナ)# rails new scaffold_sample
(コンテナ)# bin/rails db:create

データベースを作成無事できたことを確認した後にアプリケーションを起動

(コンテナ)# bin/rails server

上記手順で起動したアプリにアクセスできない

ホストからlocalhost:30000(30000はポートフォワードの設定)にアクセスしてもアプリケーションからの応答はなし
ホストのターミナルからcurlを実行してもエラー
コンテナからlocalhost宛にcurlを実行すると正常な(期待する)htmlが返却される

解決手段

アプリケーションの起動時に-b 0.0.0.0をオプションとしてつける

(コンテナ)# bin/rails server -b 0.0.0.0

するとホスト側のブラウザからアプリケーションにアクセスできるようになった
「localhost:30000」「127.0.0.1:30000」「0.0.0.0:30000」のどれでもlocalhostにアクセスできていた

オプションの値について

上記の通り、-b 0.0.0.0を指定することでによってホストからのアクセスは可能になったが
-b 127.0.0.1-b localhostではホストからアクセスできるようにはならなかった

個人的なメモとして

0.0.0.0や127.0.0.1の持つ意味や、コンテナからみた自分のIP、コンテナからみたホストのIP、ホストから見たコンテナのIPなどが、
ネットワークのオプションとともにどのように振る舞うのかを学ばなければならないと感じた

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0