前提・実現したいこと
プログラミング学習中の初学者です。現在Dockerを用いて、Railsアプリの環境構築を行なっています。
Dockerを立ち上げた際のwebコンテナからmysqlコンテナへアクセスができない状態を解決したいです。皆様の知見をお貸し頂ければと思います。何卒よろしくお願い致します。
発生している問題・エラーメッセージ
Error
1Mysql2::Error::ConnectionError 2Can't connect to MySQL server on '127.0.0.1' (111 "Connection refused")
該当のソースコード
Dockerfile
1FROM ruby:2.5.5-stretch 2ENV LANG C.UTF-8 3 4RUN apt-get update -qq && apt-get install -y \ 5 build-essential \ 6 nodejs \ 7 mysql-client \ 8 && rm -rf /var/lib/apt/lists/* 9 10RUN gem install bundler 11 12WORKDIR /tmp 13ADD Gemfile Gemfile 14ADD Gemfile.lock Gemfile.lock 15RUN bundle install 16 17ENV APP_HOME /myapp 18RUN mkdir -p $APP_HOME 19WORKDIR $APP_HOME 20ADD . $APP_HOME
DockerComposeYml
1 2version: '3' 3 4services: 5 web: 6 build: 7 context: . 8 dockerfile: Dockerfile 9 ports: 10 - "3000:3000" 11 tty: true 12 command: bundle exec rails s -p 3000 -b '0.0.0.0' 13 volumes: 14 - .:/myapp 15 depends_on: 16 - mysql 17 - chrome 18 mysql: 19 image: mysql:8.0.16 20 command: --default-authentication-plugin=mysql_native_password 21 restart: always 22 environment: 23 MYSQL_HOST: 127.0.0.1 24 MYSQL_ROOT_PASSWORD: root 25 MYSQL_DATABASE: myapp_development 26 MYSQL_USERNAME: root 27 28 ports: 29 - 4306:3306 30 volumes: 31 - ./mysql_data:/var/lib/mysql 32 chrome: 33 image: selenium/standalone-chrome:3.141.59-dubnium 34 ports: 35 - 4444:4444 36 37volumes: 38 bundle: 39 mysql_data:
DatabaseYml
1 2default: &default 3 adapter: mysql2 4 encoding: utf8 5 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 6 username: root 7 password: root 8 host: 127.0.0.1 9 port: 3306 10 socket: /var/lib/mysql/mysql.sock 11 12development: 13 <<: *default 14 database: myapp_development 15 16 17test: 18 <<: *default 19 database: myapp_test 20 21 22production: 23 <<: *default 24 database: myapp_production 25 username: myapp 26 password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
CircleCi
1version: 2 2jobs: 3 rubocop: 4 docker: 5 - image: circleci/ruby:2.5.5-stretch-node-browsers-legacy 6 environment: 7 RAILS_ENV: test 8 MYSQL_HOST: 127.0.0.1 9 BUNDLER_VERSION: 2.0.2 10 - image: circleci/mysql:8.0.16-ram 11 command: --default-authentication-plugin=mysql_native_password 12 environment: 13 MYSQL_HOST: 127.0.0.1 14 MYSQL_USERNAME: root 15 MYSQL_ROOT_PASSWORD: root 16 MYSQL_DATABASE: myapp_test 17 18 working_directory: ~/repo 19 20 steps: 21 - checkout 22 - run: 23 name: setup bundler 24 command: | 25 sudo gem update --system 26 sudo gem uninstall bundler 27 sudo rm /usr/local/bin/bundle 28 # sudo rm /usr/local/bin/bundler 29 sudo gem install bundler 30 - restore_cache: 31 keys: 32 - v1-dependencies-{{ checksum "Gemfile.lock" }} 33 - v1-dependencies- 34 - run: bundle install --jobs=4 --retry=3 --path vendor/bundler 35 - run: yarn install 36 - save_cache: 37 paths: 38 - ./vendor/bundler 39 key: v1-dependencies-{{ checksum "Gemfile.lock" }} 40 # Rubocop 41 - run: 42 name: Rubocop 43 command: bundle exec rubocop 44 45 rspec: 46 docker: 47 - image: circleci/ruby:2.5.5-stretch-node-browsers-legacy 48 environment: 49 RAILS_ENV: test 50 MYSQL_HOST: 127.0.0.1 51 BUNDLER_VERSION: 2.0.2 52 - image: circleci/mysql:8.0.16-ram 53 command: --default-authentication-plugin=mysql_native_password 54 environment: 55 MYSQL_HOST: 127.0.0.1 56 MYSQL_USERNAME: root 57 MYSQL_ROOT_PASSWORD: root 58 MYSQL_DATABASE: myapp_test 59 60 working_directory: ~/repo 61 62 steps: 63 - checkout 64 - run: 65 name: setup bundler 66 command: | 67 sudo gem update --system 68 sudo gem uninstall bundler 69 sudo rm /usr/local/bin/bundle 70 sudo gem install bundler 71 - restore_cache: 72 keys: 73 - v1-dependencies-{{ checksum "Gemfile.lock" }} 74 - v1-dependencies- 75 - run: bundle install --jobs=4 --retry=3 --path vendor/bundler 76 - run: yarn install 77 - save_cache: 78 paths: 79 - ./vendor/bundler 80 key: v1-dependencies-{{ checksum "Gemfile.lock" }} 81 - run: bundle exec rails db:create 82 83 # Rspec 84 - run: 85 name: Rspec 86 command: bundle exec rspec 87 88workflows: 89 version: 2 90 rubocop_rspec: 91 jobs: 92 - rubocop 93 - rspec: 94 requires: 95 - rubocop
試したこと
circleciでのテスト環境(MYSQL_HOST: 127.0.0.1)ではアクセスができ、CIが問題なく通る。
database.ymlの中の記載を、
host: mysql
とするとアクセスができrailsのトップページに行くが、もちろんCIは通らない。
補足情報
Docker : 18.09.2
Rails : 5.2.3
Ruby : 2.5.5p157
MySQL : 8.0.16
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。