Dockerを使ってRoR + mysql8.0の環境を構築する
目指す環境
Ruby 2.6.3 Rails 5.2.3 MySQL: 8.0.16
Dockerfile & docker-compose.ymlを作成
mysql5.7ですが、以下のサイトが非常に丁寧に説明してくださっております。 こちらを参考に、バージョン部分だけ書き換える。
Dockerfile
FROM ruby:2.6.3 ENV LANG C.UTF-8 RUN apt-get update -qq && \ apt-get install -y build-essential \ libpq-dev \ nodejs \ && rm -rf /var/lib/apt/lists/* RUN mkdir /app_name ENV APP_ROOT /app_name WORKDIR $APP_ROOT ADD ./src/Gemfile $APP_ROOT/Gemfile ADD ./src/Gemfile.lock $APP_ROOT/Gemfile.lock RUN bundle install ADD ./src/ $APP_ROOT
docker-compose.yml
version: '3' services: db: image: mysql:8.0.16 volumes: - ./src/db/mysql_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: password MYSQL_USER: root ports: - "3306:3306" web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - ./src:/app_name ports: - "3000:3000" links: - db
手順【9】でDBを作成しようとするも、以下のようなエラーが起きる
$ docker-compose exec web rake db:create Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/x86_64-linux-gnu/mariadb18/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
ググってみるとMySQL8.0.4
からデフォルトの認証方法が変わったらしい。
※ caching_sha2_password
で検索すると見つかる
docker mysql8
などで検索し見つけた記事を元にdocker-compose.yml
を修正
docker-compose.yml
version: '3' services: db: image: mysql:8.0.16 command: mysqld --default-authentication-plugin=mysql_native_password // 追加 restart: always // 追加 volumes: - ./src/db/mysql_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: password MYSQL_ROOT: root ports: - "3306:3306" web: (中略)
今度こそ!
$ docker-compose exec web rake db:create Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/x86_64-linux-gnu/mariadb18/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
なぜだ・・・
$ docker-compose run web rake db:create Can't connect to MySQL server on 'db' (111 "Connection refused") Couldn't create 'app_name_development' database. Please check your configuration.
プロジェクトを作成する前にdocker-compose.yml
への追記が必要だった
ハマった挙げ句プロジェクトを消して、初めからやり直したらうまく行った。
断念してMySQL5.7か8.0.3を入れようか、とも考えてかけたとこだったので、うまく行ってよかった。