Docker domene DNS: Slik eksponerer du containere
Når du kjører en applikasjon i Docker eller Kubernetes, er den som standard bare tilgjengelig via en IP-adresse og et portnummer. For å la brukere nå tjenesten din via et lesbart domenenavn, må du sette opp DNS riktig. I denne guiden viser vi deg hele prosessen fra A-record til ferdig oppsett.
Kort oppsummert: Du peker domenet ditt til serverens IP-adresse med en A-record, setter opp en reverse proxy (som Nginx eller Traefik) foran Docker-containerne, og konfigurerer SSL. I Kubernetes bruker du en Ingress-ressurs i stedet. Registrer .no-domene på feno.no for å komme i gang.
Hva betyr Docker domene DNS i praksis?
Docker domene DNS handler om å koble et domenenavn til en applikasjon som kjører inne i en container. Uten dette oppsettet må brukerne taste inn IP-adressen og porten manuelt, noe som verken er brukervennlig eller profesjonelt.
DNS (Domain Name System) oversetter domenenavn som minapp.no til en IP-adresse som 185.20.100.50. Når DNS er konfigurert riktig, sender det trafikk til serveren din. En reverse proxy på serveren tar imot forespørselen og videresender den til riktig Docker-container basert på domenenavnet.
Slik fungerer DNS og containere sammen
Docker og portmapping
Docker eksponerer applikasjoner via porter. Når du starter en container med -p 8080:80, blir port 8080 på vertsmaskinen koblet til port 80 inne i containeren. Problemet er at du ofte kjører flere containere på samme server, og alle trenger port 80 og 443 for vanlig webtrafikk.
Løsningen er en reverse proxy som lytter på port 80/443 og fordeler trafikken til riktig container basert på hvilket domene brukeren besøker. Dette er kjernen i et fungerende Docker domene DNS-oppsett.
Kubernetes Ingress og domener
I Kubernetes håndteres dette av en Ingress-controller. I stedet for manuell portmapping definerer du en Ingress-ressurs i YAML som kobler domenenavn til Kubernetes-tjenester. Ingress-controlleren (ofte Nginx eller Traefik) fungerer da som den automatiske reverse proxyen.
Steg for steg: Koble domenet til en Docker-container
1. Opprett en A-record for domenet
Første steg er å peke domenet til serverens IP-adresse. Logg inn hos domeneregistraren din og opprett en A-record:
- Type: A
- Navn: @ (for hoveddomenet) eller et subdomene som app
- Verdi: IP-adressen til serveren din, for eksempel 185.20.100.50
- TTL: 3600 (1 time)
Hos Feno gjør du dette direkte i kontrollpanelet under DNS-administrasjon. Endringen kan ta opptil 24 timer å propagere globalt, men vanligvis er den aktiv innen noen minutter.
Vil du bruke et subdomene som app.dittdomene.no? Da kan du alternativt bruke en CNAME-record som peker til hoveddomenet.
2. Sett opp en reverse proxy med Nginx eller Traefik
Nå trenger du en reverse proxy på serveren som mottar trafikken og sender den videre til riktig container. Her er to populære alternativer:
Alternativ A: Nginx som reverse proxy
Opprett en Nginx-konfigurasjon som videresender trafikk basert på domenenavn:
server {
listen 80;
server_name minapp.no www.minapp.no;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Kjør Nginx selv som en Docker-container for enklest mulig administrasjon:
docker run -d --name nginx-proxy \
-p 80:80 -p 443:443 \
-v /etc/nginx/conf.d:/etc/nginx/conf.d \
nginx:alpineAlternativ B: Traefik med automatisk oppdagelse
Traefik kan automatisk oppdage nye containere og konfigurere ruting via Docker-labels. Dette er spesielt nyttig når du ofte legger til og fjerner tjenester.
version: "3"
services:
traefik:
image: traefik:v3.0
command:
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
minapp:
image: minapp:latest
labels:
- "traefik.http.routers.minapp.rule=Host(`minapp.no`)"
- "traefik.http.services.minapp.loadbalancer.server.port=80"I praksis anbefaler vi Traefik for miljøer med flere containere, fordi det reduserer manuelt vedlikehold betraktelig.
3. Aktiver SSL/TLS med Let's Encrypt
Et gyldig SSL-sertifikat er avgjørende for sikkerhet og SEO. Både Nginx og Traefik støtter automatisk sertifikathåndtering via Let's Encrypt.
Med Traefik legger du til disse linjene i konfigurasjonen:
command:
- "--certificatesresolvers.letsencrypt.acme.email=din@epost.no"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
- "--entrypoints.websecure.address=:443"Med Nginx kan du bruke Certbot for automatisk sertifikatfornyelse. Kjør certbot --nginx -d minapp.no og sertifikatet fornyes automatisk.
Kubernetes: Eksponer tjenester med Ingress
I et Kubernetes-cluster bruker du en Ingress-ressurs i stedet for manuell proxy-konfigurasjon. Først må du installere en Ingress-controller (for eksempel nginx-ingress):
helm install ingress-nginx ingress-nginx/ingress-nginxDeretter oppretter du en Ingress-ressurs:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minapp-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- minapp.no
secretName: minapp-tls
rules:
- host: minapp.no
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: minapp-service
port:
number: 80Pek domenet ditt med en A-record til Ingress-controllerens eksterne IP-adresse. I skytjenester som AWS, GCP eller Azure får du ofte en LoadBalancer-IP automatisk.
Vanlige feil med Docker domene DNS og feilsøking
- DNS-endringen vises ikke: Sjekk med
dig minapp.noellernslookup minapp.no. Tøm lokal DNS-cache hvis nødvendig. Husk at propagering kan ta tid. - 502 Bad Gateway: Reverse proxyen når ikke containeren. Sjekk at containeren kjører med
docker psog at porten er riktig. - SSL-feil: Kontroller at port 80 er åpen for Let's Encrypt sin HTTP-challenge. Brannmuren må tillate innkommende trafikk på port 80 og 443.
- Feil container mottar trafikk: Dobbeltsjekk
server_namei Nginx ellerHost()-regelen i Traefik. Skrivefeil i domenenavnet er en vanlig årsak. - Container restarter: Sjekk logger med
docker logs containernavn. En ustabil container vil gi ustabil tilgjengelighet uansett DNS-oppsett.
FAQ: Ofte stilte spørsmål
Hva hvis DNS-endringen ikke fungerer etter 24 timer?
Verifiser at A-recorden er riktig konfigurert hos registraren din. Bruk dig +trace minapp.no for å se hele DNS-oppløsningskjeden. Sjekk også at navneserverne for domenet peker til riktig DNS-leverandør. Hos Feno kan du verifisere dette direkte i kontrollpanelet.
Kan jeg bruke flere domener for én Docker-container?
Ja. I Nginx legger du til flere domener i server_name-direktivet, for eksempel server_name minapp.no minapp.com. I Traefik bruker du Host(`minapp.no`) || Host(`minapp.com`). Opprett A-records for hvert domene som peker til samme server.
Trenger jeg en fast IP-adresse for Docker domene DNS?
For produksjonsmiljøer anbefaler vi alltid en statisk IP-adresse. Med dynamisk IP kan du bruke en DDNS-tjeneste (Dynamic DNS) som oppdaterer A-recorden automatisk, men dette gir lavere pålitelighet og er ikke ideelt for tjenester som skal være tilgjengelige hele døgnet.
Oppsummering
Å eksponere Docker-containere og Kubernetes-tjenester med eget domene krever tre ting: en A-record som peker domenet til serveren, en reverse proxy som ruter trafikken til riktig container, og et SSL-sertifikat for sikker tilkobling. Med verktøy som Traefik og cert-manager kan store deler av prosessen automatiseres.
Det hele starter med et domene. Sikre ditt .no-domene hos Feno i dag, sett opp DNS-pekingen i kontrollpanelet, og koble det til containerinfrastrukturen din på få minutter.