モチベーション
業務でRailsを使うことが決まったので、そのためのキャッチアップをなと。
環境構築の際に、1からやるの面倒なのでQuickstart: Compose and Railsを使用してひな形をすぐに手に入れようとしたら思った以上に面倒だった。
なので、再度環境を作るといったときに、同じ轍を踏まないようにメモを残そうかなと思った次第です。
サイトにあるものから変数名すら変えていないので、初学者の方はもしかしたらコピペで対応できるかもです。(初学者がWSL2で開発するかどうかは知りません。。。
環境
OS: Microsoft Windows 10 Home
WSLのLinuxディストリビューションは以下の通り
$cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
インストールしてから特に変更はないディストロ。
なお、基本的にVsCodeでWSL内に入り、Vscodeのターミナルからコマンド操作している。
以下躓いた部分を箇条書き。
build時にconnectionエラー
*エラー文のキャプチャ忘れてた。。
最初はdocker loginを試してみたが、治らず。
色々とググってみると、この記事がヒット。
この通りにやればbuildが問題なくできた。(もちろん、sourceで反映した後でコマンドを実行しました。)
docker-compose upにてDBコンテナが立ち上がらない。
以下、docker-compose up を実行時に出力されたlog
sampleapp-db-1 | fixing permissions on existing directory /var/lib/postgresql/data ... initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted
調べてみると、色々難しそうな話が出てきます。が、docker-compose.ymlで指定している
./tmp/db
と/var/lib/postgresql/data
がそれぞれ違うuser_id,group_idであることが原因っぽいなと。
権限変える方法もいくつかありますが、手っ取り早くdocker-compose.ymlの記述を加えて対応。
services:
db:
image: postgres
volumes:
# ./tmp/db: -> postgres_volumeへ変更
- postgres_volume:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: password
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
# NEW!! volumeを指定
volumes:
postgres_volume:
コメントした2か所を変更・追記すればDBコンテナが無事立ち上がった。ちなみに、指定した/var/lib/postgresql/dataの内容はpostgres_volumeに自動的に反映される(はず
volumeが無事できた場合は、以下のように表示されるので確認したいときは参考に
$ docker volume ls
DRIVER VOLUME NAME
local sampleapp_postgres_volume
雑記
初投稿でした。他記事と比べて内容薄いなーと感じましたし、色々とアウトプットしている人は改めてすごいなと。