alpine linux + Rails(Puma) 起動エラーで悩みまくった話
前書き
世間ではコンテナ技術が一般的になりますが、任せちゃうがゆえに低レイヤーの知識がなくても使えてしまいますね。
そしてコンテナを作ろうとした際にはまる。私もそんな一人です。対応としては動かしてみてエラーをつぶすしかないでしょうね。
いろいろはまり、検索してもあまりヒットしなかったので忘備録として残します。
まとめとしては、 alpine の パッケージ検索して、alpine のバージョンを確認しようでした
発生した問題
上記の時、以下のエラーが出ました。
api_1 | Exiting api_1 | /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `require': Error loading shared library libssl.so.1.1: No such file or directory (needed by /usr/local/bundle/gems/puma-3.12.0/lib/puma/puma_http11.so) - /usr/local/bundle/gems/puma-3.12.0/lib/puma/puma_http11.so (LoadError) api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `block in require' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:257:in `load_dependency' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `require' api_1 | from /usr/local/bundle/gems/puma-3.12.0/lib/puma/server.rb:15:in `<top (required)>' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `require' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `block in require' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:257:in `load_dependency' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `require' api_1 | from /usr/local/bundle/gems/puma-3.12.0/lib/puma/runner.rb:1:in `<top (required)>' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `require' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `block in require' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:257:in `load_dependency' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `require' api_1 | from /usr/local/bundle/gems/puma-3.12.0/lib/puma/cluster.rb:1:in `<top (required)>' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `require' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `block in require' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:257:in `load_dependency' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `require' api_1 | from /usr/local/bundle/gems/puma-3.12.0/lib/puma/launcher.rb:4:in `<top (required)>' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `require' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `block in require' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:257:in `load_dependency' api_1 | from /usr/local/bundle/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in `require' api_1 | from /usr/local/bundle/gems/puma-3.12.0/lib/rack/handler/puma.rb:15:in `config' api_1 | from /usr/local/bundle/gems/puma-3.12.0/lib/rack/handler/puma.rb:62:in `run' api_1 | from /usr/local/bundle/gems/rack-2.0.6/lib/rack/server.rb:297:in `start' api_1 | from /usr/local/bundle/gems/railties-5.2.2.1/lib/rails/commands/server/server_command.rb:53:in `start' api_1 | from /usr/local/bundle/gems/railties-5.2.2.1/lib/rails/commands/server/server_command.rb:147:in `block in perform' api_1 | from /usr/local/bundle/gems/railties-5.2.2.1/lib/rails/commands/server/server_command.rb:142:in `tap' api_1 | from /usr/local/bundle/gems/railties-5.2.2.1/lib/rails/commands/server/server_command.rb:142:in `perform' api_1 | from /usr/local/bundle/gems/thor-0.20.3/lib/thor/command.rb:27:in `run' api_1 | from /usr/local/bundle/gems/thor-0.20.3/lib/thor/invocation.rb:126:in `invoke_command' api_1 | from /usr/local/bundle/gems/thor-0.20.3/lib/thor.rb:387:in `dispatch' api_1 | from /usr/local/bundle/gems/railties-5.2.2.1/lib/rails/command/base.rb:65:in `perform' api_1 | from /usr/local/bundle/gems/railties-5.2.2.1/lib/rails/command.rb:46:in `invoke' api_1 | from /usr/local/bundle/gems/railties-5.2.2.1/lib/rails/commands.rb:18:in `<top (required)>' api_1 | from /app/user/bin/rails:9:in `require' api_1 | from /app/user/bin/rails:9:in `<top (required)>' api_1 | from /usr/local/bundle/gems/spring-2.0.2/lib/spring/client/rails.rb:28:in `load' api_1 | from /usr/local/bundle/gems/spring-2.0.2/lib/spring/client/rails.rb:28:in `call' api_1 | from /usr/local/bundle/gems/spring-2.0.2/lib/spring/client/command.rb:7:in `call' api_1 | from /usr/local/bundle/gems/spring-2.0.2/lib/spring/client.rb:30:in `run' api_1 | from /usr/local/bundle/gems/spring-2.0.2/bin/spring:49:in `<top (required)>' api_1 | from /usr/local/bundle/gems/spring-2.0.2/lib/spring/binstub.rb:31:in `load' api_1 | from /usr/local/bundle/gems/spring-2.0.2/lib/spring/binstub.rb:31:in `<top (required)>' api_1 | from /usr/local/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:70:in `require' api_1 | from /usr/local/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:70:in `require' api_1 | from /app/user/bin/spring:15:in `<top (required)>' api_1 | from /app/user/bin/rails:3:in `load' api_1 | from /app/user/bin/rails:3:in `<main>'
TRY & ERROR
- openssl-dev を入れてみよう
- ssl 系なので行けると思ったのですが、コンフリクト[1]が発生して build が失敗
- libressl-dev を入れてみよう
- 1 で記載されているが、alpine では openssl は使われていないらしい、エラーが変わらず
- エラーに従って libssl1.1 を入れてみよう
- build で失敗。 libssl1.0 は入れれたけどエラーは変わらない
最終的な解決方法
パッケージ調べたら alpine 3.9[2] 以降でないとダメそうでした。
仕方がないので、公開されている記事[3]を参考に独自にRuby を入れることにしました。
- [1] Question: how do one solve unsatisfiable constraints that require both ssl libs? https://github.com/gliderlabs/docker-alpine/issues/341#issuecomment-335038854:title
- [2] Package filter https://pkgs.alpinelinux.org/packages?name=libssl1.1&branch=v3.9
- [3] alpineベースでrubyをdocker buildしてみた https://qiita.com/tknzk/items/ee9b4ca664c8f3bce042