Hama Blog

Hama Blog

主にtech関連の記録

DockerのRails開発環境でweb-consoleを表示する

概要

新しく Rails アプリケーションを Docker 環境で開発していたときに、web-console が表示されなくて困ったのでどうすれば表示されるか調べた。

記事執筆時の環境

  • Ruby on Rails: 7.0.4

  • Docker Desktop: 4.15.0

  • Docker Compose: 3.9

結論

config/environments/development.rb に以下を設定すればよい。

config.web_console.whitelisted_ips = '0.0.0.0/0'

詳しく見てみる

web-console は、デフォルトで 127.0.0.1 しか許可していないらしい。

https://github.com/rails/web-console/blob/167c2402aed90f4b4934b04a3ef2ed14034e9f1c/lib/web_console/permissions.rb#L7-L8

# IPv4 and IPv6 localhost should be always allowed.
ALWAYS_PERMITTED_NETWORKS = %w( 127.0.0.0/8 ::1 )

Docker 環境だと localhost でアクセスしても、Rails から見た IP アドレスは以下のように 192.168.80.1 などとなったりするみたい。

>> request.remote_ip
=> "192.168.80.1"

アプリケーション用のコンテナに入って Gateway の IP アドレスを確認。

$docker inspect --format='{{range .NetworkSettings.Networks}}{{.Gateway}}{{end}}' [CONTAINER ID]
192.168.80.1

上記の IP アドレスは コンテナを作り直すたびに変わるはずなので、開発環境では全ての IP アドレスを許可するように config/environments/development.rb に以下を設定すればよさそう。

config.web_console.whitelisted_ips = '0.0.0.0/0'