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

回答編集履歴

1

Add expression

2020/08/10 15:43

投稿

y_shinoda
y_shinoda

スコア3272

answer CHANGED
@@ -13,4 +13,33 @@
13
13
 
14
14
  参考:
15
15
  [Connect the database | Quickstart: Compose and Rails | Docker Documentation](https://docs.docker.com/compose/rails/#connect-the-database)
16
- [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)
16
+ [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)
17
+
18
+ ## サービス名を `localhost` にした場合に通信できない理由
19
+
20
+ ちなみに、最初の質問時に `db` のサービス名を `localhost` にしていたのを見て
21
+ 興味があったので調べてみましたが、
22
+ その場合も `web` のコンテナー自身へのアクセスになってしまいます:
23
+
24
+ ```console
25
+ $ docker-compose run --rm web bash
26
+ Creating network "test-docker_default" with the default driver
27
+ Creating test-docker_localhost_1 ... done
28
+ root@b0d74fe61d07:/food-pictures# ping localhost
29
+ PING localhost (127.0.0.1) 56(84) bytes of data.
30
+ 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.038 ms
31
+ 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.046 ms
32
+ 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.046 ms
33
+ 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.036 ms
34
+ ^C
35
+ --- localhost ping statistics ---
36
+ 4 packets transmitted, 4 received, 0% packet loss, time 106ms
37
+ rtt min/avg/max/mdev = 0.036/0.041/0.046/0.007 ms
38
+ ```
39
+
40
+ Docker Compose のサービス同士の通信は
41
+ Docker が別途起動する DNS サービスに各サービス名が登録されることによって行われます
42
+
43
+ しかし、それよりも各コンテナーのローカルに存在する
44
+ `/etc/hosts` の `localhost` エントリーが `127.0.0.1` を指している設定が優先されるため
45
+ サービス名 `localhost` への通信は自分自身への通信となってしまうようです