どうもてぃです。
既存プロジェクトをdocker-composeで構成作るということで結構苦労してます。
いくつかトラブルがあったんですが、その中でも題にあるエラーで苦しみました。
環境
- Docker version 18.09.7, build 2d0083d
- docker-compose version 1.25.4, build unknown
- rails 5.2.0
試したこと
以前も同じようなエラーが出たのでvolume関係で怒られているんだろうなと、検討をつけて対処しようとしました。
参考にしていたのがこちらの記事。
最後の対応にあったvolumeを削除するパターンを試しました。
volumeを一回削除し再度作成することによって、volumeの中身を/usr/local/bundleと同じにする
こちらですね。
僕が作成したプロジェクトではskip bundle
は行っていなかったですし、bundle install
も試していましたので、最後の頼みの綱、すがる思いで試してみました。
が、駄目でした。
同じBundler::GemNotFound: Could not find gem
です。謎…
1から手順を見直す
手順を見直したとき、docker-composeを使ってrails newを行っていなかったことを思い出しました。
つまり、Dockerfileから先にimageを作成して、そのイメージを元にrails newしたということです。
で、 docker-compose build
した際に、先に作成したimageを指定してbuildしていなかったので、Gemfileで差が出た…と。
馬鹿じゃん自分。
解決策
めっちゃ簡単。
Gemfile.lock
を削除してビルドし直すだけ。
$ rm Gemfile.lock; touch Gemfile.lock $ docker-compose run <コンテナ名> bundle install
しょうもないことに1時間ほど費やしてしまいました。
もう二度と同じ轍を踏まないです。
ここに誓います。
追記(2021/01/27)
docker-compose.yml関連で一点ハマったので。
version: '3' services: postgres: image: postgres:10-alpine container_name: postgres volumes: - postgres-data:/var/lib/postgresql/data - ./docker/init/db:/docker-entrypoint-initdb.d ports: - '5555:5432' redis: image: redis:alpine container_name: redis ports: - '6379:6379' volumes: - redis-cache:/var/lib/redis/data web: build: . image: app command: bash -c 'rm -f tmp/pids/server.pid && bundle exec rails s -b 0.0.0.0 -p 3000' container_name: app ports: - '3000:3000' volumes: - .:/myapp:cached - /myapp/log - /myapp/.git - /myapp/tmp - /myapp/node_modules - /myapp/vendor # <- こいついらん - bundle:/usr/local/bundle tty: true stdin_open: true depends_on: - postgres - redis worker: build: . image: worker command: bundle exec sidekiq -C config/sidekiq.yml container_name: worker volumes: - .:/myapp depends_on: - postgres - redis volumes: bundle: driver: local postgres-data: driver: local redis-cache: driver: local
vendor配下に設置していると、bundle installしても更新されません。
要注意。