Dockerで起動中のRailsコンテナでrailsコンソールを使う方法を実例で解説|rails cやirbを使う方法(初心者向け、わかりやすい)

docker-prograshi(プロぐらし)-kv Docker
記事内に広告が含まれていることがあります。
[PR]

Dockerで起動しているRailsのコンテナがある場合に、そのRailsサーバーの中で、rails cでコンソールを開いて、irbを使って処理やデバッグをしたいという時があります。

このためには、Dockerの中のRailsコンテナの中に入ってrails cを実行する必要があります。

ここでは、Dockerの中のRailsコンテナの中に入ってrails cを実行する方法を実例で解説しています。


Dockerの中のRailsコンテナの中に入ってrails cを実行する方法

実例

##入りたいコンテナ名を確認
docker ps

##コンテナに入る
docker exec -it コンテナ名 /bin/bash

##railsコンソールを開く
rails c

##railsのコンソールが起動
irb(main):001:0>

以下でコードを解説します。


docker ps

まずは現在起動中のDockerコンテナの一覧を表示します。

するとコンテナのIDやコンテナ名が表示されます。

docker ps

実例

$ docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED        STATUS        PORTS                        NAMES
0ca9b5e57ff9   rails-app:latest            "/scripts/start.sh"      19 hours ago   Up 19 hours   0.0.0.0:3000->3000/tcp       rails-app

上記のCONTAINER ID「0ca9b5e57ff9」と NAMES「rails-app」のどちらかが必要です。

なお、停止中のコンテナの中にはいることはできません。必要に応じて、docker-compose up docker startなどしてコンテナを起動してください。


docker exec -it コンテナ名 /bin/bash

コンテナ名(あるいはID)がわかったので、続いてコンテナ内に入ります。

以下の「コンテナ」のところに、コンテナ名かコンテナのID番号を記載してください。

docker exec -it <コンテナ> /bin/bash

なお、一番末尾の「/bin/bash」は「sh」でも問題ありません。

docker exec -it <コンテナ> sh

実例

コンテナIDを指定する場合は以下のようになります。

末尾を「/bin/bash」にするとコマンドを入力する場所(#)の前にroot@コンテナ名が表示されます。

$ docker exec -it 0ca9b5e57ff9 /bin/bash
root@0ca9b5e57ff9:/app#

末尾を「sh」にした場合は以下のようになります。

$ docker exec -it 0ca9b5e57ff9 sh
#

どちらも同じくコンテナの中です。

もちろんコンテナIDではなく、コンテナ名を指定することもできます。

$ docker exec -it rails-app sh
#

なお、コンテナから抜ける時は「exit」と入力します。


rails c

railsアプリケーションのあるディレクトリにいるのと同じ状態です。ここでrailsのコンソールを起動するコマンドを入力します。

rails c

なお「c」 は「console」の省略形です。省略せずに以下のようにしても同じ処理になります。

rails console

実例

# rails console
`Redis#exists(key)` will return an Integer by default in redis-rb 4.3. The option to explicitly disable this behaviour via `Redis.exists_returns_integer` will be removed in 5.0. You should use `exists?` instead.
Loading development environment (Rails 6.1.4)
irb(main):001:0>

railsのコンソール(対話モード)irbが起動しました。なおirbとは「interactive Ruby」の略です。

これまでの処理でターミナルが以下の順番で変化していることがわかります。

  1. ローカルの「$」
  2. dockerの「root@コンテナ名:ルートパス#(あるいは #)
  3. railsの「irb(main)」

終了方法と注意点

終了方法

終了するときはexitquitを入力しEnterします。

抜ける時は、「irb」を終了して、次に「Railsコンテナ」から抜ける必要があります。

//irbから抜ける
irb(main):001:0> exit

//Dockerのコンテナから抜ける
# exit

//元の状態
$


irbで末尾の番号が0以外の場合

irbを使っているときに、「irb(main):014:2」といったように末尾の番号が0以外のときは処理の入力途中とみなされています。ctrl + cでクリアしてからexitしてください。

##末尾が0以外だと抜けられない(式の途中と見做されている)
irb(main):014:2> quit
irb(main):015:2> exit
irb(main):016:2> 

##ctrl + c でクリアしてからexit
irb(main):017:0> exit 


(参考)irb処理

irbが正しく動いているか確認するには、処理をしてみてください。

irb(main):001:0> p "hello rails"
"hello rails"
=> "hello rails"


irb(main):002:0> 1+2
=> 3

複数行の処理を入力する場合は以下のようになります。

irb(main):015:0> for i in 1...11 do
irb(main):016:1*   print "#{i} "
irb(main):017:1> end
1 2 3 4 5 6 7 8 9 10 => 1...11
タイトルとURLをコピーしました