Hello! I’m trying to create a Balena single container to run a custom application that I’ve written that uses bind() to create an IPv6 only server listening on a localhost port. The application runs fine on my host machine but every time I try to run the application in the container I’m met with the error “Cannot assign requested address”. Here’s an example snippet:
tcp_fd = socket(AF_INET6, SOCK_STREAM, 0);
memset((void *)&addr, 0, sizeof(addr));
addr.sin6_family = AF_INET6;
addr.sin6_port = htons(port);
addr.sin6_addr = onlylocal ? in6addr_loopback : in6addr_any;
bind(tcp_fd, (struct sockaddr *)&addr, sizeof(addr)) < 0);
On further investigation I found that the container does not have IPv6 at all:
root@f07f785919a8:# ip a
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: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/sit 0.0.0.0 brd 0.0.0.0
23: eth0@if24: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:0a:72:65:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet xxx.xxx.xxx.xxx/24 brd xxx.xxx.xxx.xxx scope global eth0
valid_lft forever preferred_lft forever
Is there a way to enable IPv6 inside a Balena single container? Additionally, the goal is to connect multiple of these containers using IPV6 sockets, the applications connect and talk to each other using a socket IPC method.