Interne Namensauflösung bei Docker mit Traefik

Interne Namensauflösung bei Docker mit Traefik

Traefik nutze ich primär um als reverse proxy von extern auf meine Docker Container zugreifen zu können. Dies natürlich SSL terminiert. Verschiedene Dienste sollen allerdings nicht extern erreichbar sein und benötigen auch – aus meiner Sicht – nicht zwingend eine verschlüsstele Verbindung.

Aus diesem Grund habe ich auf meinem internen Docker Server Traefik als reverse proxy laufen, welcher den verschiedenen Diensten via netzwerkinterner DNS-Auflösung ein DNS Namen verpasst. So kann ich z. B. via http://phpipam.docker.domain.local auf mein PHPIPAM Dienst zugreifen.

Voraussetzungen

  • Docker Host
  • Bereits eingerichtet Services (ich empfehle die Services intern immer erst mal rudimentär zu testen und dann zu erweitern)
  • internen DNS Server (ich nutze hier Windows DNS)

Auf meinem Windows DNS Server lege ich im DNS eine neue primäre Zone mit dem Namen „docker.domain.local“ (entsprechend an deine Bedürfnisse anpassen). Diese erhält dann einen einzigen A-Record der als Wildcard auf den Docker-Host zeigt.

![](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 934 638'%3E%3C/svg%3E)
Screenshot aus dem Windows DNS

Traefik einrichten

Um Traefik dann nutzen zu können, bediene ich mich zum Teil meiner vorhandenen Docker-Compose Sammlung auf Github. Den Traefik Container und die traefik.toml Datei wird dabei ein wenig angepasst.

traefik.toml:

<pre class="wp-block-code">```
 [log]   level = "DEBUG"  [providers]   [providers.docker]      exposedByDefault = false      endpoint = "unix:///var/run/docker.sock"      network = "traefik_proxy"  [entryPoints]   [entryPoints.web]     address = ":80"

docker-compose.yaml

class="wp-block-code">``` --- version: '3.3' services: traefik: image: traefik:latest container_name: traefik volumes: - /var/run/docker.sock:/var/run/docker.sock - $PWD/config:/etc/traefik - /etc/localtime:/etc/localtime ports: - "80:80" restart: always networks: - default - traefik_proxy networks: traefik_proxy: external: name: traefik_proxy default: driver: bridge ``` ``` Anschließend lässt sich der Container starten und ist bereit um Container als reverse proxy anzubieten.
>
View this post on [Instagram](https://www.instagram.com/teqqyde/)
[Als kleiner Dank von den Damen und Herren bei Containous. 💜 Bei meinen Anleitungen und Docker Projekten nutze ich gerne #Traefik als Proxy.](https://www.instagram.com/p/B7gD9-cKzxD/?utm_source=ig_embed&utm_campaign=loading) > > A post shared by [ teqqyde | Server & Networking](https://www.instagram.com/teqqydeyt/?utm_source=ig_embed&utm_campaign=loading) (@teqqydeyt) on > >
Bei den anzubietenden Services müssen wir dann natürlich auch noch die Compose Datei anpassen. Beispielhaft hier meine zu phpIPAM: ```
```
---version: '3'services:  phpipam-mysql:    image: mysql:5.7    container_name: phpipam-mysql    restart: unless-stopped    volumes:      - $PWD/mysql:/var/lib/mysql    environment:      - MYSQL_ROOT_PASSWORD=ROOTPASSWORD  phpipam-phpipam:    image: pierrecdn/phpipam:latest    container_name: phpipam-phpipam    restart: unless-stopped    environment:      - MYSQL_ENV_MYSQL_USER=root      - MYSQL_ENV_MYSQL_ROOT_PASSWORD=ROOTPASSWORD      - MYSQL_ENV_MYSQL_HOST=phpipam-mysql    labels:      - "traefik.enable=true"      - "traefik.http.routers.phpipam-http.entrypoints=web"      - "traefik.http.routers.phpipam-http.rule=Host(`phpipam.docker.domain.local`)" #Domain anpassen      - "traefik.http.services.phpipam.loadbalancer.server.port=80"    depends_on:      - phpipam-mysql    networks:      - traefik_proxy      - default  networks:   traefik_proxy:     external:       name: traefik_proxy   default:     driver: bridge
```
```

Anschließend auch noch diese Compose Datei starten und nun lässt sich, wenn alles korrekt eingerichtet wurde, der Service als URL öffnen. So ist es wesentlich einfacherer als ich für jeden Service einen neuen Port überlegen zu müssen.

🍻 Sag Danke
Mit kleinen Gesten kannst du meine Arbeit wertschätzen. Was und wie du das tun kannst, erfährst du hier.
![](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 934 638'%3E%3C/svg%3E)