Drugi daemon docker na jednej instancji supervised

Cześć.
Jestem nowy z HA ale za to mam przerobione kilka lat z linux więc ogarnąłem sobie instalację i zechciałem dorzucić kilka innych aplikacji do instancji home-assistant. O dziwo HA od razu rzucił problemami typu niekompatybilna instalacja itp. Po przejrzeniu źródła nie znalazłem opcji by zrobić whitelist moich kontenerów więc trzeba było to ogarnąć inaczej a poniżej macie opis jak to sobie zrobić. Jako, że mam świeżą instalację Debian 11 to opis tyczy się tej wersji - w poprzednich wersjach będzie to wyglądało bardzo podobnie o ile nie identycznie:

  1. Łączymy się SSH do maszyny z HA
  2. (opcjonalnie - w zależności czy SSH jako root czy user) za pomocą sudo su - lub su przechodzicie na konto root.
  3. wydajemy komendę systemctl cat docker.service - zwróci nam ona zawartość serwisu w systemd. Kopiujemy to co nam się wyświetliło.
  4. wydajemy komendę systemctl edit --force --full docker-internal.service - otworzy nam się edytor i do niego wklejamy to co skopiowaliśmy w punkcie 3.
  5. szukamy linii zaczynającej się od ExecStart= i modyfikujemy ją następująco:
    5.1 usuwamy parametr -H fd:// - określa nam on sposób połączenia hosta docker.
    5.2 dodajemy nasępujące parametry (w jednej linii, ja je tu rozpiszę pod sobą w celu opisu do czego one są):
  • -g /var/lib/docker-internal - folder, w którym nasz daemon dockera będzie trzymał obrazy, volume itp
  • --host unix:///var/run/docker-internal.sock - nowy sock dla naszego dockera w celu komunikacji z naszą instancją
  • --pidfile /var/run/docker-internal.pid - pid file określający ID naszego uruchomionego procesu
    5.3 Zapisujemy zmiany i wychodzimy z edytora
  1. komendą mkdir -p /var/lib/docker-internal towrzymy folder, który zdeklarowaliśmy w naszym serwisie
  2. wydajemy polecenia: systemctl enable docker-internal.service w celu włączenia autostartu dla naszego dockera oraz systemctl start docker-internal.service w celu jego uruchomienia.
  3. Komendą systemctl status docker-internal.service sprawdzamy status naszego serwisu - pozycja Active powinna mieć status active (running).
  4. Wydajemy polecenie echo $SHELL i jeśli odpowiedź jest /usr/bin/bash to edytujemy plik ~/.bashrc, jeśli odpowiedź jest /usr/bin/zsh to edytujemy plik ~/.zshrc
  5. Na końcu pliku dopisujemy dwie pozycje:
alias docker-internal="docker -H unix:///var/run/docker-internal.sock"
alias docker-compose-internal="docker-compose -H unix:///var/run/docker-internal.sock"
  1. Przeładowujemy shell, z którego korzystamy. Od teraz mamy dostęp do drugiego daemona dockera, który nie narusza integralności HA przy pomocy komend docker-internal oraz docker-compose-internal, tak więc miłośnicy traefik, watchtower i innych kontenerów znajdą coś dla siebie :slight_smile:

Jeśli chcecie to kolejny tutorial mogę wrzucić jak postawić sobie fajny zestaw traefik z podpięciem do jakiejś domenki z SSL itd.

2 Likes

Poproszę HA supervised + traefik + Cloudflare :wink:

OK, tylko pierw wykonaj ww. bo większość infrastruktury i tutoriali będzie bazowało na powyższej instalacji i kontenerach.

Raz mi się udało teraz nie mogę. Jak więc doinstalować na tym to:

docker run -d \
--name=ha-dockermon --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /path/to/config:/config \
-p 8126:8126 \
philhawthorne/ha-dockermon
docker run --detach \
    --name watchtower \
    --volume /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower

Po wykonaniu tutoriala pisze że konfiguracja niezdrowa

Z 5 punktu linijka wygląda tak?

ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock -g /var/lib/docker-internal --host unix:///var/run/docker-internal.sock --pidfile /var/run/docker-internal.pid

Tak, bo umożliwia modyfikacje kontenerów, a przed tym twórcy HA chcą nas chronić (bo to potencjalny wektor ataku z zewnątrz).

Jak byś uruchomił drugi daemon dockera tak jak pisałem powyżej i użył aliasu komendy dla niego:

docker-internal run -d \
--name=ha-dockermon --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /path/to/config:/config \
-p 8126:8126 \
philhawthorne/ha-dockermon

nie było by problemu z niezdrową konfiguracją :wink: