前提・実現したいこと
Rails API アプリ(アプリ名:Thinky)の開発環境をdockerコンテナを使って作りたいが、
ディレクトリ
-----app bin config db lib log public storage test tmp vendor .gitignore .ruby-version config.ru docker-compose.yml Dockerfile entrypoint.sh Gemfile Gemfile.lock Rakefile README.md
使用するdocker image
ruby 2.6.5
mysql latest
発生している問題・エラーメッセージ
docker-compose upをしたときに、
terminal
1db_1 | 2020-04-17T19:38:08.311518Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. 2Version: '8.0.19' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL. 3db_1 | 2020-04-17T19:38:08.411474Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. 4Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060
railsアプリのコンテナは正常に起動するが、mysqlのコンテナが起動するが、ブラウザ上でエラーが出る。
ブラウザ上のlocalhost:3000
Mysql2::Error::ConnectionError Can't connect to MySQL server on '127.0.0.1' (115)
該当のソースコード
docker-compose.yml
version: '3' services: db: image: mysql environment: MYSQL_DATABASE: thinky_db MYSQL_ROOT_PASSWORD: 1997 volumes: - mysql-data:/var/lib/mysql ports: - 3306:3306 web: build: . command: bash -c "rm -f /app/tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/thinky ports: - "3000:3000" depends_on: - db volumes: mysql-data: driver: local
database.yml
ruby
1default: &default 2 adapter: mysql2 3 encoding: utf8 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 6 7 8development: 9 <<: *default 10 database: thinky_development 11 host: 127.0.0.1 12 port: 3306 13 username: root 14 password: 15 16 17省略
Dockerfile
FROM ruby:2.6.5 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN mkdir /thinky WORKDIR /thinky COPY Gemfile /thinky/Gemfile COPY Gemfile.lock /thinky/Gemfile.lock RUN bundle install COPY . /thinky 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"]
entrypoint.sh
set -e rm -f /myapp/tmp/pids/server.pid exec "$@"
Gemfile
source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.6.5' gem 'rails', '~> 5.2.4', '>= 5.2.4.2' gem 'mysql2', '>= 0.4.4', '< 0.6.0' gem 'puma', '~> 3.11' gem 'bootsnap', '>= 1.1.0', require: false group :development, :test do gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end group :development do gem 'listen', '>= 3.0.5', '< 3.2' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
仮説
mysqlにlocalhostで接続する場合、デフォルトでunix domain socket経由で接続しようとする。一方で、dockerのデーモンはコンテナ外部と通信するときはunix domain socketを介した通信はできないとのことだったので、protocolをtcpに設定させたい。
### 試したこと
1. /usr/local/etc/my.cnf の記述変更
[mysqld] # Only allow connections from localhost bind-address = 127.0.0.1 port=3306 [client] protocol=TCP port=3306
エラー変わらず。
2. docker-compose.ymlファイルにdbにコマンドの記述を追加
command: --protocol=TCP
エラー
[ERROR] [MY-000067] [Server] unknown variable 'protocol=TCP'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/18 07:00
2020/04/18 09:41