Since upgrading to Erlang 29, our minimal Alpine Docker images running our releases broke when attaching to the remote console:
kubectl exec -it -n my-ns my-app-6pw7h -- /opt/my-app/bin/my-app remote_console
Node is not running!
command terminated with exit code 1
The reason for this is that the Relx extended start script uses a function relx_get_nodename that with OTP 29 get this output to stdout:
=ESOCK WARNING MSG==== 01-Jun-2026::12:10:34.561006 ===
[UNIX-ESSIO] Failed open sctp dynamic library: libsctp.so.1
the-actual-node-name
This whole strign is then bound to a hostname variable which it obviously fails to connect to.
One solution is of course to install lksctp-tools as the offical Erlang image does but our system doesn’t need SCTP and has been running fine without it for ages.
Does Erlang 29 really need to print this message to STDOUT (of all places)? I did open an issue against Relx to make this more robust too, but it would be nice if Erlang didn’t print this message in the first place?
I didn’t see anything related to socket/esock/SCTP in the Erlang 29 release notes at all. Has SCTP become a hard requirement, or maybe it always was?