【Rails × Docker】＊エラー＊ Could not find gem 'mysql2 (~> 0.5)' in any of the gem sources listed in your Gemfile.


__◆目的__
ずっと悩んでいたDockerの課題解決に一歩近ずけたので忘却録のため、記述します！
__＊補足__
私の場合、mysql2がないよ！というエラーが出た際、無理くり手動でmysql2を入れてみました。ですが、Gemfileのmysqlの次に記述されてるpumaがないですよ！というエラーが出たので、別の方法を探していたところwebpackerにたどり着きました。

__◆結論__
コンテナ上で「rails webpacker:install」このコマンドを打った後、
Gemfile.lockの中身を削除して、
docker-compose up --build　コマンドを打ったらコンテナが起動しました^^


```
root@c9fe1cb41fda:/app2# rails webpacker:install
```


##エラー文
__docker run コマンドを入力__
mysql2がgemのどのリストを探してもないとエラーがでる。
↓↓↓
__Could not find gem 'mysql2 (~> 0.5)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.__

__<font color="FireBrick">＊初回のbuildで　docker　build .　ではなく　docker-compose　 コマンドでimageを作成するべきだったのかも...</font>__

```
ユーザー名noMBP:app2 ユーザー名$ docker run -it -v /Users/ユーザー名/Desktop/app2:/app2 -p 3000:3000 f5dc18466a56 bash
root@c1f90c58d633:/app2# rails new . --force --database=mysql --skip-bundle
　〜　省略　〜
      create  storage
      create  storage/.keep
      create  tmp/storage
      create  tmp/storage/.keep
      remove  config/initializers/cors.rb
      remove  config/initializers/new_framework_defaults_6_1.rb
       rails  webpacker:install
Could not find gem 'mysql2 (~> 0.5)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.
```


##仮説１ Gemfileにmysqlの記述がないのかもしれない。
catコマンドでGemfileの中身を確認
↓↓↓
Gemfileに　__gem 'mysql2', '~> 0.5'__　　が存在している。

```
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.7.2'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 6.1.0'
# Use mysql as the database for Active Record
gem 'mysql2', '~> 0.5'
# Use Puma as the app server
gem 'puma', '~> 5.0'
　〜　省略　〜
```
##仮説２ webpackerに問題があるのではないか。
webpackerインストールの直後にエラーが出ているため、webpackerに問題があるのではないか。
コンテナでrails sしてみるとwebpackerのエラーが出ていてwebpackerを入れてねと言われていることがわかる。
__Webpacker configuration file not found /app2/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - /app2/config/webpacker.yml (RuntimeError)__

```
root@c9fe1cb41fda:/app2# rails s
=> Booting Puma
=> Rails 6.1.0 application starting in development 
=> Run `bin/rails server --help` for more startup options
Exiting
Traceback (most recent call last):

　〜　省略　〜

	 2: from /usr/local/bundle/gems/webpacker-5.2.1/lib/webpacker/configuration.rb:92:in `data'
	 1: from /usr/local/bundle/gems/webpacker-5.2.1/lib/webpacker/configuration.rb:95:in `load'
/usr/local/bundle/gems/webpacker-5.2.1/lib/webpacker/configuration.rb:99:in `rescue in load': Webpacker configuration file not found /app2/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - /app2/config/webpacker.yml (RuntimeError)

```

app2の中を確認→webpacker.ymlがない。

調べるとRails6以降はデフォルトでwebpackerが入っているということだったが、
なかったので、試行錯誤して入れてみることにした。

①Dockerfileへ記述してもう一度　build　してみる「apt-get install -y  webpacker'」
__E: Unable to locate package webpacker
ERROR: Service 'web' failed to build : The command '/bin/sh -c apt-get install -y  webpacker' returned a non-zero code: 100__

```
ユーザー名noMBP:app2 ユーザー名$ docker-compose up --build
Building web
Step 1/24 : FROM ruby:2.7
 ---> 7e58098089a4
Step 2/24 : ENV BUNDLER_VERSION=2.1.4
　〜　省略　〜
Step 11/24 : RUN apt-get install -y  webpacker
 ---> Running in 283d9d5a7034
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package webpacker
ERROR: Service 'web' failed to build : The command '/bin/sh -c apt-get install -y  webpacker' returned a non-zero code: 100

```

②コンテナの中で以下のコマンドを実行

```
root@c9fe1cb41fda:/app2# rails webpacker:install
```
Done in 153.13s.
Webpacker successfully installed 🎉 🍰

__成功!!__


##Gemfile.lockの中身を削除して docker-compose up --build　を実行

__無事に起動!!__

```
web_1  | => Booting Puma
web_1  | => Rails 6.1.0 application starting in development 
web_1  | => Run `bin/rails server --help` for more startup options
web_1  | Puma starting in single mode...
web_1  | * Puma version: 5.1.1 (ruby 2.7.2-p137) ("At Your Service")
web_1  | *  Min threads: 5
web_1  | *  Max threads: 5
web_1  | *  Environment: development
web_1  | *          PID: 1
web_1  | * Listening on http://0.0.0.0:3000
web_1  | Use Ctrl-C to stop
```

##まとめ
根本的な解決には至ってないですが、なんとかコンテナを起動させることができました。

__１.　docker runした際、なぜWebpackerがインストールされずmysqlのエラーが出たのか。
２.　直接コンテナでコマンドを打つことで起動させることができたが、次回起動時問題ないのか__

上記2点引き続き調べていきたいと思います。