目次
エラーが発生した背景
「Docker Desktop」のバージョンアップを実施しました。
バージョンアップ後に既存のrailsアプリを「docker-compose up」で起動したら、エラーが発生して起動しなくなりました。
dockerの起動エラー
user@user-Book-Air dk-r6_bugs-cookthings % docker-compose up
[+] Running 2/0
⠿ Container dk-r6_rails-app-web-1 Created 0.0s
⠿ Container dk-r6_rails-app-db-1 Created 0.0s
Attaching to dk-r6_rails-app-db-1, dk-r6_rails-app-web-1
dk-r6_rails-app-web-1 | bundler: failed to load command: rails (/usr/local/bundle/bin/rails)
dk-r6_rails-app-web-1 | /usr/local/lib/ruby/3.1.0/bundler/definition.rb:489:in `materialize': Could not find rails-6.1.4.6, pg-1.3.2, puma-4.3.11, image_processing-1.12.1, cloudinary-1.22.0, active_storage_validations-0.9.6, bootsnap-1.10.3, capybara-3.36.0, selenium-webdriver-4.1.0, rails-i18n-7.0.2, mini_portile2-2.7.1, actioncable-6.1.4.6, actionmailbox-6.1.4.6, actionmailer-6.1.4.6, actionpack-6.1.4.6, actiontext-6.1.4.6, actionview-6.1.4.6, activejob-6.1.4.6, activemodel-6.1.4.6, activerecord-6.1.4.6, activestorage-6.1.4.6, activesupport-6.1.4.6, railties-6.1.4.6, msgpack-1.4.5, nokogiri-1.13.1-aarch64-linux, rack-2.2.3, regexp_parser-2.2.1, concurrent-ruby-1.1.9, sprockets-4.0.2, http-cookie-1.0.4, public_suffix-4.0.6, loofah-2.14.0, unf_ext-0.0.8 in any of the sources (Bundler::GemNotFound)
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/definition.rb:190:in `specs'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/definition.rb:238:in `specs_for'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/runtime.rb:18:in `setup'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler.rb:151:in `setup'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/setup.rb:20:in `block in <top (required)>'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/ui/shell.rb:136:in `with_level'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/ui/shell.rb:88:in `silence'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/setup.rb:20:in `<top (required)>'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/cli/exec.rb:56:in `require_relative'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/cli/exec.rb:56:in `kernel_load'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/cli/exec.rb:23:in `run'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/cli.rb:484:in `exec'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/cli.rb:31:in `dispatch'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/cli.rb:25:in `start'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/gems/3.1.0/gems/bundler-2.3.3/libexec/bundle:48:in `block in <top (required)>'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/3.1.0/bundler/friendly_errors.rb:103:in `with_friendly_errors'
dk-r6_rails-app-web-1 | from /usr/local/lib/ruby/gems/3.1.0/gems/bundler-2.3.3/libexec/bundle:36:in `<top (required)>'
dk-r6_rails-app-web-1 | from /usr/local/bin/bundle:25:in `load'
dk-r6_rails-app-web-1 | from /usr/local/bin/bundle:25:in `<main>'
dk-r6_rails-app-web-1 exited with code 1
dk-r6_rails-app-db-1 |
dk-r6_rails-app-db-1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
dk-r6_rails-app-db-1 |
dk-r6_rails-app-db-1 | 2022-06-06 14:11:13.469 JST [1] LOG: starting PostgreSQL 14.1 (Debian 14.1-1.pgdg110+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
dk-r6_rails-app-db-1 | 2022-06-06 14:11:13.469 JST [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
dk-r6_rails-app-db-1 | 2022-06-06 14:11:13.469 JST [1] LOG: listening on IPv6 address "::", port 5432
dk-r6_rails-app-db-1 | 2022-06-06 14:11:13.473 JST [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
dk-r6_rails-app-db-1 | 2022-06-06 14:11:13.492 JST [27] LOG: database system was shut down at 2022-06-06 14:10:51 JST
dk-r6_rails-app-db-1 | 2022-06-06 14:11:13.522 JST [1] LOG: database system is ready to accept connections
^CGracefully stopping... (press Ctrl+C again to force)
[+] Running 2/2
⠿ Container dk-r6_rails-app-web-1 Stopped 0.0s
⠿ Container dk-r6_rails-app-db-1 Stopped 0.2s
canceled
<原因>不明だが、バージョンアップでpathがおかしくなった?
原因の特定はできませんでした。
ただ、以下2つのコマンドを実行すると違いが出ました。
実行:docker-compose run –rm web ruby -v
ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [aarch64-linux]
実行:docker-compose run –rm web rails -v
Could not find rails-6.1.6 in any of the sources
Run `bundle install` to install missing gems.
rubyコマンドが実行できても、railsコマンドが実行できない事が分かります。
だとするなら、railsコマンドが通るようにパスを通せばOK?と思い、まずパスを確認しました。
実行:docker-compose run –rm web which bundle
/usr/local/bin/bundle
特におかしいパスを見つけられませんでした。
<解決>コンテナを再構築する
もしかしたら他に変更すべきパスがあるのかもしれませんが、時間もないので、コンテナの再構築をしました。
手順は以下の通りです。
- dockerのコンテナとイメージを削除する
- railsアプリの「Gemfile.lock」を削除する
- Dockerファイル群のある「Gemfile.lock」空にする
- Dockerファイル群のある「Gemfile」を最新のrailsアプリの「Gemfile」に上書き
- dockerの再構築:実行コマンド「docker-compose build –no-cache」
- dockerの実行:実行コマンド「docker-compose up」
上記手順で起動させる事ができました。
手順2と3は、もしかしたら飛ばせる?かもしれませんが、少なくとも手順4は実行しないと同じエラーになりました。
コメント