初歩的な質問かもしれませんが、質問させてください。
既存アプリのルートにDockerfile,docker-compose.ymlを追加して中身を記述、database.ymlを変更して docker-compose build
まで問題なく通りました。
開発、テスト環境のDBにはmysqlを使っています。
最初のユーザー登録(パスワードの設定など)も含めて完了しており、mysqlの中には入れる状態です。
しかし docker-compose run web rake db:create db:migrate
こちらのコマンドで立ち上げようとすると、
Starting book_give_app_db_1 ... done Host '172.24.0.4' is not allowed to connect to this MySQL server Couldn't create 'db/development_mysql' database. Please check your configuration. rake aborted! Mysql2::Error: Host '172.24.0.4' is not allowed to connect to this MySQL server /usr/local/bundle/gems/mysql2-0.4.10/lib/mysql2/client.rb:89:in `connect' /usr/local/bundle/gems/mysql2-0.4.10/lib/mysql2/client.rb:89:in `initialize' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `new' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `mysql2_connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:879:in `new_connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:923:in `checkout_new_connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:902:in `try_to_checkout_new_connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:863:in `acquire_connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:587:in `checkout' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:431:in `connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:1111:in `retrieve_connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_handling.rb:231:in `retrieve_connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_handling.rb:199:in `connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/mysql_database_tasks.rb:8:in `connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/mysql_database_tasks.rb:16:in `create' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:126:in `create' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:185:in `block in create_current' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:479:in `block (2 levels) in each_current_configuration' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:476:in `each' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:476:in `block in each_current_configuration' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:475:in `each' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:475:in `each_current_configuration' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:184:in `create_current' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/railties/databases.rake:39:in `block (2 levels) in <top (required)>' /usr/local/bundle/gems/rake-13.0.0/exe/rake:27:in `<top (required)>' Tasks: TOP => db:create (See full trace by running task with --trace)
というエラーが出ます????
mysqlへの接続で問題が生じているのは分かるのですが、具体的にどこが問題なのかがどうしても分かりません。
関連ファイルは以下です。参考記事はpotgresを使っているので、その部分をmysqlに変えています。
docker-compose.yml
#docker-composeのバージョン version: '3' services: db: image: mysql:latest ports: - '5432:5432' web: build: context: . dockerfile: Dockerfile command: bundle exec rails s -p 3000 -b '0.0.0.0' tty: true stdin_open: true depends_on: - db # DB側のコンテナが出来上がってからwebを実行する ports: - "3000:3000" # ホストからゲストへポートフォワード volumes: - .:/myproject # ソースコード変更したらDocker側も即反映されるように volumes: mysql-data: driver: local
怪しいかなと思っているのがwebのvolumesのところです...
Dockerfile
FROM ruby:2.5.5 RUN apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/* RUN apt-get update && apt-get install -y mariadb-client --no-install-recommends && rm -rf /var/lib/apt/lists/* RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs # yarnパッケージ管理ツールをインストール RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ 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 && \ apt-get update && apt-get install -y yarn # Node.jsをインストール RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \ apt-get install nodejs WORKDIR /myproject ADD Gemfile /myproject/Gemfile ADD Gemfile.lock /myproject/Gemfile.lock RUN gem install bundler RUN bundle install ADD . /myproject
database.yml
# SQLite. Versions 3.8.0 and up are supported. # gem install sqlite3 # # Ensure the SQLite 3 gem is defined in your Gemfile # gem 'sqlite3' # default: &default adapter: mysql2 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 username: root password: host: db encoding: utf8 development: <<: *default database: db/development_mysql # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default database: db/test_mysql production: <<: *default adapter: postgresql encoding: unicode pool: 5
Herokuでデプロイしている関係でproductionのみpostgresを使用しております。
database.yml
のdefaultの部分、ここの password
にローカルのmysqlパスワードを入れてもダメでした(dockerを使うので当たり前かもしれませんが)
mysqlのuserなどはwebコンテナの中に入って新しく作成する必要があるのでしょうか?????
どなたか教えていただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/16 05:48
2019/11/19 12:54 編集