回答編集履歴

1

Add expression

2020/08/10 15:43

投稿

y_shinoda
y_shinoda

スコア3272

test CHANGED
@@ -29,3 +29,61 @@
29
29
  [Connect the database | Quickstart: Compose and Rails | Docker Documentation](https://docs.docker.com/compose/rails/#connect-the-database)
30
30
 
31
31
  [Rails アプリケーションのデータベース接続設定を db サービスに接続できるように変更 | Docker 公式ドキュメントの Rails Quickstart 完全解説 - Qiita](https://qiita.com/y_shinoda/items/1d02d3c63e003e6c7ea2#rails-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%8E%A5%E7%B6%9A%E8%A8%AD%E5%AE%9A%E3%82%92-db-%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E5%A4%89%E6%9B%B4)
32
+
33
+
34
+
35
+ ## サービス名を `localhost` にした場合に通信できない理由
36
+
37
+
38
+
39
+ ちなみに、最初の質問時に `db` のサービス名を `localhost` にしていたのを見て
40
+
41
+ 興味があったので調べてみましたが、
42
+
43
+ その場合も `web` のコンテナー自身へのアクセスになってしまいます:
44
+
45
+
46
+
47
+ ```console
48
+
49
+ $ docker-compose run --rm web bash
50
+
51
+ Creating network "test-docker_default" with the default driver
52
+
53
+ Creating test-docker_localhost_1 ... done
54
+
55
+ root@b0d74fe61d07:/food-pictures# ping localhost
56
+
57
+ PING localhost (127.0.0.1) 56(84) bytes of data.
58
+
59
+ 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.038 ms
60
+
61
+ 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.046 ms
62
+
63
+ 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.046 ms
64
+
65
+ 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.036 ms
66
+
67
+ ^C
68
+
69
+ --- localhost ping statistics ---
70
+
71
+ 4 packets transmitted, 4 received, 0% packet loss, time 106ms
72
+
73
+ rtt min/avg/max/mdev = 0.036/0.041/0.046/0.007 ms
74
+
75
+ ```
76
+
77
+
78
+
79
+ Docker Compose のサービス同士の通信は
80
+
81
+ Docker が別途起動する DNS サービスに各サービス名が登録されることによって行われます
82
+
83
+
84
+
85
+ しかし、それよりも各コンテナーのローカルに存在する
86
+
87
+ `/etc/hosts` の `localhost` エントリーが `127.0.0.1` を指している設定が優先されるため
88
+
89
+ サービス名 `localhost` への通信は自分自身への通信となってしまうようです