Relx broken on Erlang 29 without SCTP

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?

Erlang has decided that you have SCTP (configure has found SCTP include files).

Then when it tries to load the library (during node start), it fails.
Rather then silently ignore this we issue a warning message.
But maybe we should write this to STDERR instead.

I do not know why Relx only partly install SCTP.

Regards,
/BMK

Ah, that would explain it. We’re building on an Hex.pm Erlang 29 Alpine image (which probably has SCTP) and then shipping the release on a bare Alpine image (without SCTP).

Installing the package lksctp-tools for the release image here is the correct solution I think. Thanks for your reply!