【Docker】環境構築時に起きたエラー一覧

#はじめに

Dockerについて学習し、既存のRailsアプリにDockerを導入しようと思い、公式のクイックスタートなどを参照しながら行いました。
その時に発生したエラーを備忘録のため、投稿しています。

#環境
Ruby '2.6.5'
Rails '6.0.0'
Docker for Mac導入済み

#エラー事例①

###状況

```ruby:Dockerfile
FROM ruby:2.6.5

RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
    && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs yarn

RUN mkdir /(アプリ名)

WORKDIR /(アプリ名）
COPY Gemfile /（アプリ名）/Gemfile
COPY Gemfile.lock /（アプリ名）/Gemfile.lock
RUN bundle install
COPY . /(アプリ名）

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0"]
```

% docker-compose build　で立ち上げようとすると下記のエラーが発生

###エラー文

```ruby:エラー文
/usr/local/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe': Could not find 'bundler' (2.1.4) required by your /assist/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:2.1.4`
	from /usr/local/lib/ruby/2.6.0/rubygems.rb:302:in `activate_bin_path'
	from /usr/local/bin/bundle:23:in `<main>'
ERROR: Service 'web' failed to build : The command '/bin/sh -c bundle install' returned a non-zero code: 1
```

###解決策

RUN gem install bundlerを挿入すると解決！

```ruby:Dockerfile
(中略）
COPY Gemfile.lock /(アプリ名)/Gemfile.lock
RUN gem install bundler
RUN bundle install
（中略）
```

調べてみると、原因はlocal環境とDocker内でのbundlerのバージョンが違うため、エラーが出たそうです。gem install bundlerを入れるととりあえず解決。。。まだまだあります。。。

#エラー事例②

###状況

```ruby:docker-compose.yml
version: "3"
services:
  db:
    image: mysql:5.6.47
    environment:
        MYSQL_ROOT_PASSWORD: password
        MYSQL_DATABASE: root
    ports:
        - "3000:3000"
    volumes:
        - ./db/mysql/volumes:/var/lib/mysql
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    stdin_open: true
    tty: true
    volumes:
      - .:/(アプリ名）
      - gem_data:/usr/local/bundle
    ports:
      - "3000:3000"
    depends_on:
      - db
volumes:
  mysql_data:
  gem_data:
```

docker-compose build成功後、docker-compose up -dコマンドを実行したところ、

###エラー文

```ruby:
ERROR: for web  Cannot start service web: driver failed programming external connectivity on endpoint myapp_web_1 (ae889e882d7c9f8b72f9c9b244159d86662f4abebef7d15fac4016573fe56de4): Bind for 0.0.0.0:3000 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.
```


###解決策

DBサーバーとWebサーバーのポート番号を3000で同じにしていたため、Webサーバーが立ち上がらないことが原因であると考えます。単純なミスでした。。

DBのポート番号を3306に変更し、修正しました。

```ruby:docker-compose.yml
(中略）
    ports:
        - "3306:3306"
```

#エラー事例③

###状況
先ほどのエラーを解決後、もう一度、docker-compose upコマンド実行してみると、、下記のエラーが発生。

```ruby:エラー文
warning Integrity check: System parameters don't match
error Integrity check failed
error Found 1 errors.
web_1  | 
web_1  | 
web_1  | ========================================
web_1  |   Your Yarn packages are out of date!
web_1  |   Please run `yarn install --check-files` to update.
web_1  | ========================================
web_1  | 
web_1  | 
web_1  | To disable this check, please change `check_yarn_integrity`
web_1  | to `false` in your webpacker config file (config/webpacker.yml).
web_1  | 
web_1  | 
web_1  | yarn check v1.22.5
web_1  | info Visit https://yarnpkg.com/en/docs/cli/check for documentation about this command.
web_1  | 
web_1  | 
web_1  | Exiting
```

見たところ、yarnのupgradeを行ってくださいかのように感じたため、yarn upgradeコマンドを実行するも、変わらず。。。

###解決策

エラー文をよくよく見てみると、、、

```ruby:
web_1  | To disable this check, please change `check_yarn_integrity`
web_1  | to `false` in your webpacker config file (config/webpacker.yml).
```

のような記述があったため、早速該当のディレクトリに行ってみると

```ruby:config/webpacker.yml
（中略）
check_yarn_integrity: false
```

ありました！！defaultでtrueになっていたため、falseに書き換えると解決しました！！！最後の1個いきます。。。


#エラー事例④

###状況
docker-compose up -dが成功し、localhost:3000でアクセスしようとすると

ActiveRecord::NoDatabaseError

が発生。


###解決策

単純でしたね。db:createコマンドを忘れていました。。。

```ruby:ターミナル
% docker-compose exec web rails db:create
% docker-compose exec web rails db:migrate
```

#終わりに
ビューファイルが思いっきり崩れていたので、原因究明してきます。。。。