Skip to content

ListenBrainz fetch fails on IPv4-only hosts unless HTTP/2 is disabled #102

@spacecitycoog

Description

@spacecitycoog

When running Explo in Docker on an IPv4-only host (IPv6 disabled), Explo fails to fetch ListenBrainz playlists and logs errors such as:

  • failed to get weekly-exploration playlist, check if ListenBrainz has generated one this week

  • failed to make request to ListenBrainz API: EOF

This occurs even though the playlists clearly exist and can be retrieved manually.

Environment

  • Host OS: Unraid (Docker)

  • Explo image: ghcr.io/lumepart/explo:latest

  • Discovery service: ListenBrainz

  • Music system: Navidrome (Subsonic API)

  • IPv6: disabled on host and inside container
    /proc/sys/net/ipv6/conf/all/disable_ipv6 = 1

  • Timezone: correctly matched between ListenBrainz and container

Symptoms

  • ./explo --playlist=weekly-exploration fails consistently
  • Same failure for weekly-jams and daily-jams
  • Logs misleadingly suggest the playlist does not exist
  • No authentication or configuration errors are reported

Debugging Findings
Inside the container:

Direct API access works:
curl https://api.listenbrainz.org/1/user//playlists/createdfor
returns valid playlist JSON.

Curl output shows:

  • IPv6 connection attempts fail (Network unreachable)
  • IPv4 succeeds
  • Server negotiates HTTP/2

However, Explo’s internal request fails with an EOF error, suggesting an HTTP/2 client issue when IPv6 is unavailable

Workaround
Force Go to disable HTTP/2 by setting:

environment:
GODEBUG: http2client=0

After applying this:

  • Explo immediately succeeds
  • Playlists are fetched correctly
  • Downloads begin as expected
  • No other configuration changes required

Example successful log:
INFO Starting Explo...
INFO initiating search track="Artist - Song"

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions