💾 QNAP QTS & Docker

QNAP Container Station: Risolvere Conflitti Porte 80/443 & Reverse Proxy [2026]

⚡ L'Ostacolo Principale di QNAP per i Sysadmin

Di fabbrica, QTS impegna sia la porta 80 che la porta 443 dell'interfaccia di rete fisica. Quando provi a lanciare uno stack Docker Compose con un reverse proxy (es. Nginx Proxy Manager, Traefik o Caddy), Docker crasha restituendo:
Error response from daemon: driver failed programming external connectivity on endpoint: bind: address already in use.

1. Step 1: Liberare le Porte di Sistema di QTS

Per cedere le porte 80 e 443 ai tuoi container Docker, dobbiamo spostare la porta di ascolto di QTS su intervalli non standard:

  1. Apri il browser e accedi alla dashboard di amministrazione di QTS.
  2. Vai su Pannello di controllo → Sistema → Impostazioni generali.
  3. Nella sezione Amministrazione del sistema:
    • Numero porta sistema (HTTP): Cambia da 8080 o 80 a 8088.
    • Abilita connessione sicura (HTTPS): Sposta il valore da 443 o 4433 a 8443.
    • Disattiva l'opzione: "Reindirizza automaticamente le connessioni HTTP a HTTPS" se questa opzione è legata alla porta 80.
  4. Clicca su Applica. (La pagina ricaricherà automaticamente su https://IP-DEL-NAS:8443).

2. Step 2: Disattivare il Web Server Apache Integrato

Anche dopo aver cambiato le porte di amministrazione, QNAP esegue un server Apache integrato che intercetta la porta 80 per servire la pagina predefinita di benvenuto.

  1. Nel Pannello di controllo, vai su Applicazioni → Server Web.
  2. Se il Web Server è abilitato, deseleziona la casella Abilita server Web oppure modifica la sua porta HTTP in 8085 e la porta HTTPS in 8445.
  3. Clicca su Applica.

3. Step 3: Deploy di Nginx Proxy Manager in Container Station

Ora le porte standard 80 e 443 sono completamente libere sul socket di rete del NAS. Creiamo lo stack Docker Compose per Nginx Proxy Manager.

version: '3.8'

services:
  npm-app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - '80:80'    # Porta HTTP pubblica liberata
      - '443:443'  # Porta HTTPS pubblica liberata
      - '81:81'    # Dashboard di amministrazione web NPM
    environment:
      DB_MYSQL_HOST: "npm-db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "PasswordSicuraDB2026!"
      DB_MYSQL_NAME: "npm"
    volumes:
      - /share/Container/npm/data:/data
      - /share/Container/npm/letsencrypt:/etc/letsencrypt
    depends_on:
      - npm-db
    networks:
      - homelab-net

  npm-db:
    image: 'mariadb:10.11'
    container_name: npm-database
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: "RootSuperSecretPassword!"
      MYSQL_DATABASE: "npm"
      MYSQL_USER: "npm"
      MYSQL_PASSWORD: "PasswordSicuraDB2026!"
    volumes:
      - /share/Container/npm/mysql:/var/lib/mysql
    networks:
      - homelab-net

networks:
  homelab-net:
    name: homelab-net
    driver: bridge

4. Step 4: Collegare i Container Interni senza Esporre Porte

Grazie alla rete bridge condivisa (homelab-net), non hai più bisogno di mappare porte esterne per gli altri container (come WordPress, Pi-hole o Nextcloud):

❓ Domande Frequenti (FAQ Tecniche)

Risposte sintetiche ai dubbi architetturali e agli errori operativi più frequenti su questo scenario.

Perché ricevo l'errore 'bind: address already in use' avviando un container sulla porta 80 o 443 del QNAP?

Perché il sistema operativo del NAS (QTS/QuTS hero) riserva e occupa nativamente la porta 80 (per il redirect HTTP a HTTPS o per il web server integrato) e la porta 443 per la console di amministrazione web del NAS.

Se sposto le porte di QTS rischio di non riuscire più ad accedere al NAS?

No, purché tu prenda nota delle nuove porte (ad esempio porta HTTP 8080 e porta HTTPS 8443). L'accesso al pannello avverrà semplicemente digitando https://IP-DEL-NAS:8443.

È sicuro esporre la porta 80 e 443 del QNAP su Internet?

Esporre direttamente QTS è fortemente sconsigliato. Esporre invece un Reverse Proxy Docker isolato (come Nginx Proxy Manager) che instrada solo servizi specifici protetti da SSL e WAF riduce drasticamente la superficie di attacco.