Skip to content

Expose the actual GUI ports (8080/8181) and the content server port (8081) - #220

Open
azullus wants to merge 1 commit into
linuxserver:masterfrom
azullus:expose-gui-ports
Open

azullus wants to merge 1 commit into
linuxserver:masterfrom
azullus:expose-gui-ports

Conversation

@azullus

@azullus azullus commented Sep 29, 2026

Copy link
Copy Markdown

linuxserver.io


  • I have read the contributing guideline and understand that I have made the correct modifications

Description:

Adds EXPOSE 8080 8181 8081 to Dockerfile and Dockerfile.aarch64 (there is no armhf Dockerfile), using the same # ports and volumes convention as docker-calibre-web.

Benefits of this PR and context:

docker image inspect lscr.io/linuxserver/calibre --format '{{json .Config.ExposedPorts}}' returns {"3000/tcp":{},"3001/tcp":{}}, which are inherited from baseimage-selkies. This image moves the Selkies nginx frontend to 8080/8181 via CUSTOM_PORT / CUSTOM_HTTPS_PORT, so nothing listens on 3000/3001 (ss -tlnp in a running container shows nginx on 8080 and 8181).

Tools that read ExposedPorts pick the wrong port: Traefik's automatic port detection, Portainer/Unraid templates, compose validators and healthcheck generators. The result is connection refused on 3000 and an unhealthy container. We lost a deploy cycle to this before checking the live sockets.

This PR adds EXPOSE 8080 8181 8081 to both Dockerfiles, matching the ports in readme-vars.yml (8081 = the optional Calibre content server). Docker can't remove an inherited EXPOSE, so 3000/3001 will still appear, but the real ports will now be listed as well.

  • Changes replicated in Dockerfile.aarch64
  • No readme or changelog change needed. The ports are already documented. Add a readme-vars.yml changelog line if maintainers want one.

How Has This Been Tested?

Checked against a running lscr.io/linuxserver/calibre container: docker image inspect --format '{{json .Config.ExposedPorts}}' shows only 3000/tcp and 3001/tcp, while ss -tlnp inside the container shows nginx listening on 8080 and 8181. The change is metadata-only (EXPOSE does not publish or bind anything), so runtime behaviour is unchanged.

Source / References:

  • docker-baseimage-selkies Dockerfile: EXPOSE 3000 3001
  • This repo's Dockerfile: CUSTOM_PORT="8080", CUSTOM_HTTPS_PORT="8181"
  • readme-vars.yml documents 8080 / 8181 / 8081

The image moves the Selkies frontend to 8080/8181 via CUSTOM_PORT but
only inherits EXPOSE 3000 3001 from baseimage-selkies, so ExposedPorts
metadata points tools at ports nothing listens on.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Development

Successfully merging this pull request may close these issues.

3 participants