Skip to main content

Docker-Secrets

Passwört nicht im Klartext in das docker-compose schreiben

  • secrets: in docker-compose.yml

  • Datei auf dem Host (nicht im Git-Repo), z. B. ./secrets/watchtower_smtp_password.txt

  • Im Container liegt das dann nur noch unter /run/secrets/watchtower_smtp_password

  • Die compose.yml enthält nur noch den Pfad, nicht das Passwort

Das ist klar besser als:

  • Passwort im Klartext direkt in docker-compose.yml

  • oder in .env direkt neben dem Compose-File, das dann am Ende doch im Repository landet

Es schützt vor:

  • versehentlichem Push in Git

  • versehentlichem Anzeigen in Logs, docker inspect usw.

  • „mal eben schnell Screenshot von der Compose-Datei schicken“

Es schützt nicht vor:

  • Rootzugriff auf den Host (der kann die Secret-Datei lesen)

  • jemandem, der sich in den Container einloggen darf

Für einen privaten Server oder eine kleine Umgebung ist das genau das, was man realistisch erwartet: Exposition reduzieren, nicht perfekte Kryptographie.

Beispiel für docker-compose

cd /srv/watchtower
mkdir -p secrets
echo 'DEIN-SMTP-PASSWORT-HIER' > secrets/watchtower_smtp_password
chmod 600 secrets/watchtower_smtp_password
services:
  watchtower:
    image: containrrr/watchtower
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/localtime:/etc/localtime:ro
    environment:
      - DOCKER_API_VERSION=1.44
      - WATCHTOWER_CLEANUP=true
....
      # Vorher "- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=123456"
      # WICHTIG: hier jetzt den PFAD zur Secret-Datei angeben, nicht das Passwort selbst
      - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=/run/secrets/watchtower_smtp_password
    labels:
      - "com.centurylinklabs.watchtower.enable=false"
      - "com.centurylinklabs.watchtower.name=watchtower"
    ports:
      - "9443:8080"
    secrets:
      - watchtower_smtp_password

secrets:
  watchtower_smtp_password:
    file: ./secrets/watchtower_smtp_password
  • In environment steht jetzt der Pfad /run/secrets/watchtower_smtp_password.

  • Unter secrets: definierst du, woher diese Datei kommt.

  • Docker sorgt dafür, dass sie im Container unter /run/secrets/watchtower_smtp_password landet.

  • Watchtower liest den Inhalt dieser Datei als Passwort (siehe „Secrets/Files“-Abschnitt in der Doku).