dotnet / aspire

An opinionated, cloud ready stack for building observable, production ready, distributed applications in .NET
https://learn.microsoft.com/dotnet/aspire
MIT License
3.63k stars 408 forks source link

Linux: Dcp fail to start when IPv6 is disabled #4561

Closed ggmueller closed 2 months ago

ggmueller commented 2 months ago

When trying to launch apphost when IPv6 is disabled, app host fails to bind ports and does not start:

fail: Aspire.Hosting.Dcp.dcpctrl.ServiceReconciler[0]
      could not start the proxy {"ServiceName": {"name":"api_http"}, "Reconciliation": 6, "error": "cound not start the proxy for the service: listen tcp [::1]:5394: bind: cannot assign requested address"}
fail: Aspire.Hosting.Dcp.dcpctrl.ServiceReconciler[0]
      could not start the proxy {"ServiceName": {"name":"api_https"}, "Reconciliation": 5, "error": "cound not start the proxy for the service: listen tcp [::1]:7479: bind: cannot assign requested address"}fail: Aspire.Hosting.Dcp.dcpctrl.ServiceReconciler[0]
      could not start the proxy {"ServiceName": {"name":"sql"}, "Reconciliation": 4, "error": "cound not create the proxy for the service: listen tcp [::1]:0: bind: cannot assign requested address"}

When IPv6 is disabled, it would be desirable to fall back to IPv4 localhost and/or to improve the error message in this scenario.

Environment

Distro: PopOS 22.04

kernel-name nodename kernel-release kernel-version machine operating-system
Linux pc 6.8.0-76060800daily20240311-generic #202403110203\~1715181801\~22.04\~aba43ee SMP PREEMPT_DYNAMIC Wed M x86_64 GNU/Linux

Steps to reproduce

sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1

Sometimes it only can be reproduced after rebooting after disabling ipv6

mitchdenny commented 2 months ago

@karolz-ms @danegsta

afscrome commented 2 months ago

Sounds similar to https://github.com/dotnet/aspire/issues/3355#issuecomment-2040631676 .

karolz-ms commented 2 months ago

@ggmueller could you please share

TIA!

ggmueller commented 2 months ago

@karolz-ms

AppHost

var builder = DistributedApplication.CreateBuilder(args);

var sqlInstance = builder.AddSqlServer("sql");
var YDatabase = sqlInstance.AddDatabase("Y", "Y");

var apiProject = builder.AddProject<Y_API>("Y-api")
    .WithReference(YDatabase);

builder.Build().Run();

ip addr show:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enx0090933967da: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:90:93:39:67:da brd ff:ff:ff:ff:ff:ff
    inet 192.168.12.97/24 brd 192.168.12.255 scope global dynamic noprefixroute enx0090933967da
       valid_lft 86219sec preferred_lft 86219sec
    inet6 fe80::3a80:5cfd:125f:2512/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none 
4: br-142440a9a171: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:13:3a:e8:0d brd ff:ff:ff:ff:ff:ff
    inet 172.30.0.1/16 brd 172.30.255.255 scope global br-142440a9a171
       valid_lft forever preferred_lft forever
5: br-438479e22fc1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:92:71:10:be brd ff:ff:ff:ff:ff:ff
    inet 192.168.32.1/20 brd 192.168.47.255 scope global br-438479e22fc1
       valid_lft forever preferred_lft forever
6: wlp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 14:ac:60:46:8c:9d brd ff:ff:ff:ff:ff:ff
    inet 192.168.13.30/24 brd 192.168.13.255 scope global dynamic noprefixroute wlp1s0
       valid_lft 86223sec preferred_lft 86223sec
    inet6 fe80::873b:b3a:c50e:af98/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
7: br-817af40afc51: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:20:d5:c4:20 brd ff:ff:ff:ff:ff:ff
    inet 192.168.16.1/20 brd 192.168.31.255 scope global br-817af40afc51
       valid_lft forever preferred_lft forever
8: br-b990161d87c3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:50:80:78:67 brd ff:ff:ff:ff:ff:ff
    inet 172.22.0.1/16 brd 172.22.255.255 scope global br-b990161d87c3
       valid_lft forever preferred_lft forever
9: br-bb8bc3699531: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:11:5a:ee:55 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-bb8bc3699531
       valid_lft forever preferred_lft forever
10: br-c8b68449d37b: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:13:92:7c:1b brd ff:ff:ff:ff:ff:ff
    inet 172.26.0.1/16 brd 172.26.255.255 scope global br-c8b68449d37b
       valid_lft forever preferred_lft forever
11: br-22d7f0704b63: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:4a:46:a1:fd brd ff:ff:ff:ff:ff:ff
    inet 172.24.0.1/16 brd 172.24.255.255 scope global br-22d7f0704b63
       valid_lft forever preferred_lft forever
12: br-7ec3ef3015e1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:41:f9:86:5c brd ff:ff:ff:ff:ff:ff
    inet 172.25.0.1/16 brd 172.25.255.255 scope global br-7ec3ef3015e1
       valid_lft forever preferred_lft forever
13: br-9acb631a345f: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:75:36:a0:54 brd ff:ff:ff:ff:ff:ff
    inet 172.31.0.1/16 brd 172.31.255.255 scope global br-9acb631a345f
       valid_lft forever preferred_lft forever
14: br-b93e457aa4ef: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:99:a0:35:62 brd ff:ff:ff:ff:ff:ff
    inet 192.168.128.1/20 brd 192.168.143.255 scope global br-b93e457aa4ef
       valid_lft forever preferred_lft forever
15: br-422736bf852b: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:e8:fc:f9:74 brd ff:ff:ff:ff:ff:ff
    inet 172.23.0.1/16 brd 172.23.255.255 scope global br-422736bf852b
       valid_lft forever preferred_lft forever
16: br-65283452ba97: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:31:f7:5c:ff brd ff:ff:ff:ff:ff:ff
    inet 172.27.0.1/16 brd 172.27.255.255 scope global br-65283452ba97
       valid_lft forever preferred_lft forever
17: br-9b58e40279a2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:50:ad:8f:19 brd ff:ff:ff:ff:ff:ff
    inet 172.28.0.1/16 brd 172.28.255.255 scope global br-9b58e40279a2
       valid_lft forever preferred_lft forever
18: br-c49b5df85e69: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:a6:7c:3f:e0 brd ff:ff:ff:ff:ff:ff
    inet 172.29.0.1/16 brd 172.29.255.255 scope global br-c49b5df85e69
       valid_lft forever preferred_lft forever
19: br-d96ae817db11: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:a9:e7:72:20 brd ff:ff:ff:ff:ff:ff
    inet 172.19.0.1/16 brd 172.19.255.255 scope global br-d96ae817db11
       valid_lft forever preferred_lft forever
20: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:56:0e:f4:d1 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
21: br-b9a07b9aa868: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:e7:21:97:7f brd ff:ff:ff:ff:ff:ff
    inet 172.21.0.1/16 brd 172.21.255.255 scope global br-b9a07b9aa868
       valid_lft forever preferred_lft forever
23: vetheeba05e@if22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-438479e22fc1 state UP group default 
    link/ether 1e:5f:1e:a4:77:41 brd ff:ff:ff:ff:ff:ff link-netnsid 0
25: veth87fc720@if24: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-438479e22fc1 state UP group default 
    link/ether 76:8f:af:09:2f:61 brd ff:ff:ff:ff:ff:ff link-netnsid 1
ggmueller commented 2 months ago

As it just happened to me, gathering the information. Sometimes I can only reproduce it, after a reboot, when disabling IPv6. (Added that as comment to steps to reproduce)

karolz-ms commented 2 months ago

@ggmueller thank you, much appreciated. Investigating...

karolz-ms commented 2 months ago

This will be resolved in Aspire 8.1 release. See https://github.com/dotnet/aspire/issues/3355#issuecomment-2214930489 for the description of the new DCP_IP_VERSION_PREFERENCE environment variable and how it can be used to instruct Aspire/DCP to prefer IPv4 or IPv6.