質問するログイン新規登録

回答編集履歴

2

Add third answer

2020/08/16 12:38

投稿

y_shinoda
y_shinoda

スコア3272

answer CHANGED
@@ -41,4 +41,40 @@
41
41
  ```console
42
42
  2020-08-16 13:28:46+09:00 [Note] [Entrypoint]: Creating user root
43
43
  ERROR 1396 (HY000) at line 1: Operation CREATE USER failed for 'root'@'%'
44
+ ```
45
+
46
+ > データベースを追加しようとしたところ接続エラーが発生してしまいました。
47
+
48
+ ```console
49
+ ~@yk golfour_aws % docker-compose run web bundle exec rake db:create
50
+ Starting golfour_aws_db_1 ... done
51
+ Database 'golfour_development' already exists
52
+ Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")
53
+ Couldn't create 'golfour_test' database. Please check your configuration.
54
+ rake aborted!
55
+ Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")
56
+ ```
57
+
58
+ 上記のエラーメッセージは、
59
+ 「golfour_development は作成済ですが、golfour_test を作ろうとして
60
+  ローカルの MySQL にアクセスしようとしましたが、接続用 socket がみつかりませんでした」
61
+ という内容です
62
+
63
+ web コンテナーのローカルには MySQL はないので
64
+ db サービスに接続する必要がありますが、
65
+ database.yml の設定が、host の設定が `development` にしかありませんので、
66
+ `test` にも追加しましょう:
67
+
68
+ ```diff
69
+ development:
70
+ <<: *default
71
+ database: golfour_development
72
+ username: root
73
+ password: password
74
+ host: db
75
+
76
+ test:
77
+ <<: *default
78
+ database: golfour_test
79
+ + host: db
44
80
  ```

1

Add second answer

2020/08/16 12:38

投稿

y_shinoda
y_shinoda

スコア3272

answer CHANGED
@@ -1,3 +1,5 @@
1
+ ## 元の回答
2
+
1
3
  db サービスのコンテナーが停止していませんでしょうか?
2
4
 
3
5
  参考: [docker-composeコマンド実行時の不可解なエラー - Qiita](https://qiita.com/isacRU/items/dda2f2d9511c3a61854e)
@@ -18,4 +20,25 @@
18
20
  docker-compose logs db
19
21
  ```
20
22
 
21
- 参考: [docker-compose logs | Docker Documentation](https://docs.docker.com/compose/reference/logs/)
23
+ 参考: [docker-compose logs | Docker Documentation](https://docs.docker.com/compose/reference/logs/)
24
+
25
+ ## 追記
26
+
27
+ 根本原因は `docker-compose.yml` で `MYSQL_USER` に `root` を指定していることです
28
+
29
+ `root` は指定しなくても作成されるので
30
+ ここでは別のユーザー名を指定するか、
31
+ もしくは別のユーザーが必要ないのであれば
32
+ `MYSQL_PASSWORD` とともに環境変数を削除し、
33
+ ユーザーの作成をやめます
34
+
35
+ ログが表示されないのは、再起動を繰り返したため
36
+ 過去のログが流れて最初のエラーが消えてしまっている可能性があります
37
+
38
+ ./mysql/mysql_data を削除して再起動すると
39
+ 次のようなエラーが表示されます:
40
+
41
+ ```console
42
+ 2020-08-16 13:28:46+09:00 [Note] [Entrypoint]: Creating user root
43
+ ERROR 1396 (HY000) at line 1: Operation CREATE USER failed for 'root'@'%'
44
+ ```