作成中のRailsアプリの開発環境をDockerに移管する際にエラーが発生しました。
ビルドまではできましたが、db:createで以下のエラーが発生しました。
~@yk golfour_aws % docker-compose up -d Pulling db (mysql:8.0)... Status: Downloaded newer image for mysql:8.0 Creating golfour_aws_db_1 ... done Creating golfour_aws_web_1 ... done ~@yk golfour_aws % docker-compose run web bundle exec rake db:create Starting golfour_aws_db_1 ... done Unknown MySQL server host 'db' (-2) Couldn't create 'golfour_development' database. Please check your configuration. rake aborted! Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (-2)
解決方法を探してdocker-compose.ymlとdatabase.ymlを見直しましたが、問題があるようには見えません。
アドバイスいただければ幸いです。よろしくお願いいたします。
開発環境:
Ruby 2.5.1
Rails 5.2.4.3
Mac OS
Dockerfile:
FROM ruby:2.5.1 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 mysql-client --no-install-recommends && rm -rf /var/lib/apt/lists/* RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN mkdir /workdir WORKDIR /workdir ADD Gemfile /workdir/Gemfile ADD Gemfile.lock /workdir/Gemfile.lock ENV BUNDLER_VERSION 2.1.4 RUN gem install bundler RUN bundle install ADD . /workdir
docker-compose.yml:
version: '3' services: db: image: mysql:8.0 environment: MYSQL_DATABASE: golfour_development MYSQL_ROOT_PASSWORD: password MYSQL_USER: root MYSQL_PASSWORD: password TZ: Asia/Tokyo volumes: - ./mysql/mysql_data:/var/lib/mysql - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf ports: - "4306:3306" web: build: context: . dockerfile: Dockerfile command: /bin/sh -c "rm -f /workdir/tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" tty: true stdin_open: true depends_on: - db ports: - "3000:3000" volumes: - .:/workdir
database.yml:
default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default database: golfour_development username: root password: password host: db test: <<: *default database: golfour_test production: <<: *default database: <%= ENV['DB_NAME'] %> username: <%= ENV['DB_USERNAME'] %> password: <%= ENV['DB_PASSWORD'] %> host: <%= ENV['DB_HOSTNAME'] %>
mysql/my.cnf:
# MySQLサーバーへの設定 [mysqld] # 文字コード/照合順序の設定 character-set-server = utf8mb4 collation-server = utf8mb4_bin # タイムゾーンの設定 default-time-zone = SYSTEM log_timestamps = SYSTEM # デフォルト認証プラグインの設定 default-authentication-plugin = mysql_native_password # エラーログの設定 log-error = /var/log/mysql/mysql-error.log # スロークエリログの設定 slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 5.0 log_queries_not_using_indexes = 0 # 実行ログの設定 general_log = 1 general_log_file = /var/log/mysql/mysql-query.log # mysqlオプションの設定 [mysql] # 文字コードの設定 default-character-set = utf8mb4 # mysqlクライアントツールの設定 [client] # 文字コードの設定 default-character-set = utf8mb4
追記
~@yk golfour_aws % docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------ golfour_aws_db_1 docker-entrypoint.sh mysqld Exit 1 golfour_aws_web_1 /bin/sh -c rm -f /workdir/ ... Up 0.0.0.0:3000->3000/tcp ~@yk golfour_aws % docker-compose logs db Attaching to golfour_aws_db_1 db_1 | 2020-08-16 12:54:40+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started. db_1 | 2020-08-16 12:54:41+09:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' db_1 | 2020-08-16 12:54:41+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started. db_1 | 2020-08-16 12:55:16+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started. db_1 | 2020-08-16 12:55:17+09:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' db_1 | 2020-08-16 12:55:17+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started. db_1 | 2020-08-16 13:01:38+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started. db_1 | 2020-08-16 13:01:38+09:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' db_1 | 2020-08-16 13:01:38+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started.
追記
~@yk golfour_aws % docker-compose run web bundle exec rake db:create Starting golfour_aws_db_1 ... done Database 'golfour_development' already exists Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory") Couldn't create 'golfour_test' database. Please check your configuration. rake aborted! Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")
追記
docker-composed.yml:
docker
1version: '3' 2services: 3 db: 4 image: mysql:8.0 5 command: --default-authentication-plugin=mysql_native_password 6 environment: 7 MYSQL_ROOT_PASSWORD: password 8 MYSQL_DATABASE: golfour_development 9 MYSQL_USER: yuki 10 MYSQL_PASSWORD: password 11 TZ: Asia/Tokyo 12 volumes: 13 - ./mysql/mysql_data:/var/lib/mysql 14 - ./logs:/var/log/mysql 15 - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf 16 ports: 17 - "4306:3306" 18 web: 19 build: 20 context: . 21 dockerfile: Dockerfile 22 command: /bin/sh -c "rm -f /workdir/tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 23 tty: true 24 stdin_open: true 25 depends_on: 26 - db 27 ports: 28 - "3000:3000" 29 volumes: 30 - .:/workdir 31
database.yml:
database.yml
1default: &default 2 adapter: mysql2 3 encoding: utf8 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 6development: 7 <<: *default 8 database: golfour_development 9 username: yuki 10 password: password 11 host: db 12 socket: /tmp/mysql.sock 13 14test: 15 <<: *default 16 database: golfour_test 17 host: db 18 username: yuki 19 password: password 20 socket: /tmp/mysql.sock 21 22production: 23 <<: *default 24 database: <%= ENV['DB_NAME'] %> 25 username: <%= ENV['DB_USERNAME'] %> 26 password: <%= ENV['DB_PASSWORD'] %> 27 host: <%= ENV['DB_HOSTNAME'] %> 28
~@yk golfour_aws % docker-compose run web bundle exec rake db:create Starting golfour_aws_db_1 ... done Can't connect to MySQL server on 'db' (111 "Connection refused") Couldn't create 'golfour_development' database. Please check your configuration. rake aborted! Mysql2::Error::ConnectionError: Can't connect to MySQL server on 'db' (111 "Connection refused")
追記
~@yk golfour_aws % docker-compose run web rails db:migrate Starting golfour_aws_db_1 ... done Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"exec\": executable file not found in $PATH": unknown

回答1件
あなたの回答
tips
プレビュー