Ja, das ist absolut möglich ✅ — du kannst denselben Docker-Container über mehrere Domains oder Subdomains via Traefik erreichbar machen, und im Container selbst unterscheiden, über welche Domain der Aufruf kam.

⸻

🔧 Überblick

Traefik ist ein Reverse Proxy, der anhand von Regeln Anfragen an Container weiterleitet.
Du kannst mehrere Router-Regeln definieren, die alle auf denselben Service (also denselben Container) zeigen.

⸻

🧩 Beispiel: Zwei Domains auf denselben Container

Angenommen, du hast zwei Domains:
	•	app.example.com
	•	test.example.org

Und einen Container myapp, der auf Port 8080 lauscht.

Dann kannst du in deinen Traefik-Labels Folgendes setzen:

version: '3.8'

services:
  myapp:
    image: myapp:latest
    labels:
      - "traefik.enable=true"

      # Router 1
      - "traefik.http.routers.myapp1.rule=Host(`app.example.com`)"
      - "traefik.http.routers.myapp1.entrypoints=websecure"
      - "traefik.http.routers.myapp1.tls.certresolver=myresolver"
      - "traefik.http.routers.myapp1.service=myapp-service"

      # Router 2
      - "traefik.http.routers.myapp2.rule=Host(`test.example.org`)"
      - "traefik.http.routers.myapp2.entrypoints=websecure"
      - "traefik.http.routers.myapp2.tls.certresolver=myresolver"
      - "traefik.http.routers.myapp2.service=myapp-service"

      # Gemeinsamer Service
      - "traefik.http.services.myapp-service.loadbalancer.server.port=8080"

Beide Router (myapp1, myapp2) leiten an denselben Service (myapp-service) weiter, der den Container auf Port 8080 anspricht.

⸻

🧠 Im Container unterscheiden, welche Domain aufgerufen wurde

Sobald eine Anfrage im Container landet, kannst du anhand des HTTP-Headers Host erkennen, über welche Domain sie kam.

Beispiel (z. B. in einer Node.js-, PHP-, Python- oder Go-App):

# Beispiel Flask / Python
from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
    host = request.headers.get('Host')
    return f"Aufgerufen über: {host}"

app.run(host='0.0.0.0', port=8080)

Oder in Node.js:

app.get('/', (req, res) => {
  res.send(`Aufgerufen über: ${req.headers.host}`);
});

Das Feld req.headers.host enthält genau den Hostnamen, den Traefik aus der Anfrage durchreicht (app.example.com oder test.example.org).

⸻

✅ Zusammengefasst

Ziel	Vorgehen
Mehrere Domains/Subdomains auf denselben Container routen	Mehrere Traefik-Router mit unterschiedlichen Host()-Regeln, aber demselben Service
Domain im Container unterscheiden	Den Host-Header der Anfrage auslesen
SSL-Zertifikate	Für jede Domain einen Router mit tls.certresolver definieren (Traefik kümmert sich um Let’s Encrypt automatisch)

⸻

Wenn du magst, kann ich dir ein vollständiges docker-compose.yml-Beispiel mit Traefik + deinem App-Container (inkl. HTTPS via Let’s Encrypt) zusammenstellen.
👉 Soll ich das machen?