docker composeのnetworksを設定すると「read ECONNRESET」「curl: (56) Recv failure」
今回はdocker composeのnetworksを設定してIPアドレスを固定したコンテナに対してポート番号を指定してアクセスしようとすると「read ECONNRESET」や「curl: (56) Recv failure: Connection reset by peer」と出たときに私はどう対応したのかについてお話ししていきます。
docker composeのnetworksを設定すると「read ECONNRESET」「curl: (56) Recv failure」
まず私は次のようにdocker-compose.ymlを設定しておりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
services: app1: networks: test_net: ipv4_address: 192.168.33.10 app2: networks: test_net: ipv4_address: 192.168.33.20 app3: networks: test_net: ipv4_address: 192.168.33.12 app4: networks: test_net: ipv4_address: 192.168.33.21 app5: networks: test_net: ipv4_address: 192.168.33.1 networks: test_net: driver: bridge ipam: driver: default config: - subnet: 192.168.0.0/16 |
しかし上記だとREST APIを投げると数分待った後
read ECONNRESET
というエラーが返ってきて、
curl -I localhost:8000
とコマンドを叩くと数分待った後
curl: (56) Recv failure: Connection reset by peer
というエラーが出てしまいました。
Dockerのバージョンを2.2.0.3から4.29.0に上げましたが、Dockerのバージョンを上げる前はうまくいっていました。
また、networksの記述を消してdefaultのネットワークを使うと正常にレスポンスが返ってきます。
そこで私は一旦
docker network ls
のコマンドを叩いて、defaultのネットワークについて
docker network inspect cfc44a5b79fd
と叩いてDockerネットワークの詳細を見ることにしました。
すると、下記の結果が返ってきました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
$ docker network inspect cfc44a5b79fd [ { "Name": "test_docker_default", "Id": "cfc44a5b79fd5d64002f3570a5e5d12a06df17b86d5317b537caf2ecc4eee28f", "Created": "2024-04-30T05:50:46.802771502Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.19.0.0/16", "Gateway": "172.19.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": { "com.docker.compose.network": "default", "com.docker.compose.project": "test_docker", "com.docker.compose.version": "2.26.1" } } ] |
ひとまず「Subnet」と「Gateway」の値を真似てみることに。
できあがった新しいdocker-compose.ymlはこちらです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
services: app1: networks: test_net: ipv4_address: 172.19.0.10 app2: networks: test_net: ipv4_address: 172.19.0.20 app3: networks: test_net: ipv4_address: 172.19.0.12 app4: networks: test_net: ipv4_address: 172.19.0.21 app5: networks: test_net: ipv4_address: 172.19.0.2 networks: test_net: driver: bridge ipam: driver: default config: - subnet: 172.19.0.0/16 gateway: 172.19.0.1 |
するとなぜかうまくいき、REST APIの結果が返ってきて、curlも通るようになりました。
理由は分かりませんがこれで解決ですね。
どなたか理由をご存知の方がいたら教えてください。
終わりに
今回はdocker composeのnetworksを設定してIPアドレスを固定したコンテナに対してポート番号を指定してアクセスしようとすると「read ECONNRESET」や「curl: (56) Recv failure: Connection reset by peer」と出たときに私はどう対応したのかについてお話しいたしました。
ディスカッション
コメント一覧
まだ、コメントがありません