spartacus
Goto Top

FreeRadius im Docker Container

Hallo,

ich versuche gerade meinen RadiusServer (FreeRadius) nach Docker zu migrieren. Ein entsprechendes DockerImage habe ich via Docker Compose auf meiner Qnap (Container Station) in der Grundkonfiguration lauffähig.

Was ich absolut nicht hinkriege ist, meine Config-Files zu mounten. Sobald ich versuche die Files in das Image zu mounten. Die einzige Konfig-Datei die eingebunden wird, ist die unter "mods-available". Alles andere stoppt den Container sofort ohne Fehlermeldung. Ich schätze, dass hier das Modul sql (mods-enabled) nicht aktiviert werden kann. Dabei handelt es sich auch um einen symlink, der zwar korrekt auf dem share abgebildet ist, aber wahrscheinlich nicht gemoutet werden kann und damit den Container stpoot.

Vielleicht habe ich aber auch einen Gedankenfehler und das muss ganz anders laufen. Wenn kemand eine Idee hat, bitte posten. Ich bin für alle Tipps dankbar.

Spartacus.


Compose File:
version: '3'  
services:

# FreeRadius
  radius:
    image: freeradius/freeradius-server:latest
    container_name: FreeRadius
    hostname: freeradius
    ports:
     - "1812:1812"  
     - "1813:1813"  
    volumes:
     - /share/VirtualMachine/Container/Freeradius/config/mods-available/sql:/etc/freeradius/mods-available/sql
     - /share/VirtualMachine/Container/Freeradius/config/sites-available/default:/etc/freeradius/sites-available/default
     - /share/VirtualMachine/Container/Freeradius/config/sites-available/inner-tunnel:/etc/freeradius/sites-available/inner-tunnel
     - /share/VirtualMachine/Container/Freeradius/config/mods-enabled/sql:/etc/freeradius/mods-enabled/sql

    networks:
      vlan:
       ipv4_address: 192.168.1.3


networks:
  vlan:
    driver: macvlan
.....

Content-ID: 22886365360

Url: https://administrator.de/contentid/22886365360

Ausgedruckt am: 23.11.2024 um 11:11 Uhr

Crusher79
Crusher79 04.11.2023 um 00:04:08 Uhr
Goto Top
godlie
godlie 04.11.2023 um 06:05:56 Uhr
Goto Top
Hallo,

ich denke du musst dein freeradius image noch ein bisserl optimieren,
erstelle dir ein Dockerfile:

FROM freeradius/freeradius-server:latest
RUN apt update
RUN apt install -y mysql-client

Adaptier deine docker_compose:
version: '3'    
services:

# FreeRadius
  radius:
    build:
      context: ./
      dockerFile: ./Dockerfile
    container_name: FreeRadius
    hostname: freeradius
    ports:
     - "1812:1812"    
     - "1813:1813"    
    volumes:
     - /share/VirtualMachine/Container/Freeradius/config/mods-available/sql:/etc/freeradius/mods-available/sql
     - /share/VirtualMachine/Container/Freeradius/config/sites-available/default:/etc/freeradius/sites-available/default
     - /share/VirtualMachine/Container/Freeradius/config/sites-available/inner-tunnel:/etc/freeradius/sites-available/inner-tunnel
     - /share/VirtualMachine/Container/Freeradius/config/mods-enabled/sql:/etc/freeradius/mods-enabled/sql

    networks:
      vlan:
       ipv4_address: 192.168.1.3


networks:
  vlan:
    driver: macvlan
.....

grüße
Spartacus
Spartacus 04.11.2023 um 08:53:14 Uhr
Goto Top
Hallo zusammen,

vielen Dank für die schnellen Antworten.

@ godlie:
Das mit dem SQL Client hatte ich tatsächlich nicht mehr auf dem Schirm. Die Freeradius-VM, die ich gerade betreibe läuft allerdings mit diesem Paket.
sudo apt-get install freeradius-mysql
Ich nehme mal an, das kann ich dann hier ebenfalls tun, oder?


Was ich auch gelesen habe ist, dass man keine Symlinks mounten kann. Auf meiner VM habe ich den Link damals so angelegt.
$ sudo cd /etc/freeradius/3.0/mods-enabled
$ sudo ln -s ../mods-available/sql sql
Ich habe das zwar auf den Fileshare kopiert und der sieht auch korrekt aus, aber ob das funktioniert, ist die Frage! Das Problem ist halt, dass es keine Fehlermeldungen gibt. Entweder der Container startet, oder halt nicht. Das ist für das "Troubleshooting" irgendwie nicht so nice!


Wegen Dockerfile:
Habe ich bislang noch keine Erfahrungen mit. Aktuelle installiere ich die Images über die Container Station (Web-Interface) auf der Qnap. Da kann ich zwar die Compose-Files in ein Codefenster platzieren und dann ausführen, aber ich habe keine Ahnung, wie und wo ich das dockerfile hinterlegen muss. Wenn ich das über die Konsole mache, wüsste ich auch nicht, wo Compose und Dockerfile platziert werden sollen. Ich habe die Pfade nicht gefunden. Wenn da noch jemand nen Tipp für mich hätte?

Danke und Gruß,
Spartacus.
godlie
godlie 04.11.2023 um 09:19:51 Uhr
Goto Top
Hallo,

das ist jetzt keine große Kunst, du kannst dich per ssh auf die NAS connecten und das ganze direkt dort machen.

https://raptorkwok.medium.com/using-dockerfile-in-qnap-nas-8b4107cc49e9

Kurzabriss:
  • Ordner erstellen
  • Dockerfile erzeugen
  • docker build .
  • Container Station öffnen -> Image auswählen ....

grüße
Spartacus
Spartacus 04.11.2023 um 11:52:15 Uhr
Goto Top
Moin,

also irgendwie bin ich zu blöd dafür.

Ich habe auf der qnap den Ordner Dockerfile erstellt und darin eine Datei mit folgendem Inhalt:

FROM freeradius/freeradius-server:latest
RUN apt update
RUN apt install -y freeradius-mysql

dann wechsle ich in das Verzeichnis und führe folgenden Befehl aus:
docker build .
dann rattert er los und ich bekomme eine WARNING:
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
am Ende ist es aber successful.

Allerdings sind die Images nicht zu gebrauchen. Sie haben weder einen Namen noch eine Version. Und mir ist auch unklar, warum 2 Images gebaut werden.

So ganz habe ich es noch nicht!
bild
Spartacus
Spartacus 04.11.2023 um 12:24:47 Uhr
Goto Top
ok, das mit dem Namen habe ich hingekriegt, aber ich weiß immer noch nicht, was die <none>-Zeile sein soll, die auch erzeugt wird.
bild
Spartacus
Spartacus 04.11.2023 um 18:29:05 Uhr
Goto Top
Moin zusammen,

also es scheint nur über ein dockerfile zu gehen. Soweit habe ich auch alles hingekriegt, aber mit dem Symlink funktioniert das noch nicht. Offensichtlich wird das ln-Command anders ausgeführt.
FROM freeradius/freeradius-server:latest

RUN apt update
RUN apt install -y freeradius-mysql
RUN apt install -y ssh
RUN apt install -y nano
COPY default /etc/freeradius/sites-available/default
COPY inner-tunnel /etc/freeradius/sites-available/inner-tunnel
COPY sql /etc/freeradius/mods-available/sql
RUN cd /etc/freeradius/mods-enabled
RUN ln -s ../mods-available/sql sql

Ich kann in den Container gucken, wenn ich ihn so starte, wenn ich ihn so starte:
docker run --name vlan99 -d freeradius sleep 999999999999
dann kann ich den ln Befehl absetzten und der Server startet dann auch ohne Fehlermeldungen. Aber wie kriege ich den ln in das Dockerfile?
Spartacus
Spartacus 04.11.2023 aktualisiert um 19:10:10 Uhr
Goto Top
Hallo,

ok, ich habe es hingekriegt. Der RadiusServer läuft jetzt mit der externen MariaDB im Docker!

Das ist das Dockerfile:
FROM freeradius/freeradius-server:latest

RUN apt update
RUN apt install -y freeradius-mysql
RUN apt install -y ssh
RUN apt install -y nano
COPY default /etc/freeradius/sites-available/default
COPY inner-tunnel /etc/freeradius/sites-available/inner-tunnel
COPY sql /etc/freeradius/mods-available/sql
RUN ln -s /etc/freeradius/mods-available/sql /etc/freeradius/mods-enabled/sql

Danach das Image mit DockerCompose anwerfen und das Netzwerk zuweisen und alles ist gut!

Danke

P.S.
was ich noch nicht verstehe ist, warum docker für jeden Befehl ein "Child"- Image anlegt. Ist das ein qnap Isssue? oder muss man da im Dockerfile noch was einstellen. Zumindest kann man die nicht löschen, da sie auf das eigentliche freeradius Image zeigen.
cild
godlie
godlie 04.11.2023 aktualisiert um 19:42:54 Uhr
Goto Top
Hallo,

ja das ist per Design so, siehe https://docs.docker.com/build/guide/layers/

Du kannst das image auch mit einem prune säubern https://docs.docker.com/engine/reference/commandline/image_prune/

Hier ist es ein wenig mehr aufgeschlüsselt: https://www.baeldung.com/ops/docker-remove-dangling-unused-images

grüße
Spartacus
Spartacus 05.11.2023 um 12:24:11 Uhr
Goto Top
Hallo,

danke für das Feedback. Ich habe es jetzt auch tatsächlich irgendwie wegbekommen, aber mit prune ging es nicht. Ich habe den laufenden Container gelöscht und dann die <none>s entfernt. Danach den Container mit docker-compose neu erstellt und jetzt läuft alles wie es soll! Muss ich noch mal nachvollziehen, wie das am Ende dann funktioniert.

Danke und Gruß,
Spartacus.
godlie
Lösung godlie 05.11.2023 um 12:35:14 Uhr
Goto Top
Hallo,

ja fein wenns geklappt hat, dann nur wäre nur noch eines Wie kann ich einen Beitrag als gelöst markieren?

grüße
Spartacus
Spartacus 29.12.2023 aktualisiert um 22:39:57 Uhr
Goto Top
Hallo zusammen,

ich versuche gerade ein "build image" innerhalb eines docker-compose files, aber ich kriege das nicht hin. Er schmeißt mir einen Fehler in Zeile 6 aus. Offenbar versteht er die Zeile dockerfile nicht. Der Phad stimmt aber. Auch die Option no-cache frisst er nicht! Hat irgendjemand eine Idee? Ich nutze die dockerstation auf der qnap.
version: '3'  
services:
# CheckMK
  checkmk:
    build: 
      dockerfile: /share/VirtualMachine/CheckMkDockerfile
      no-cache: true
    container_name: checkmk
    hostname: chekmk-test
    networks:
      vlan:
       ipv4_address: 172.16.10.99

networks:
  vlan:
    driver: macvlan
    driver_opts:
      parent: eth3.10 # schema is {INTERFACE}.{VLAN ID}
    ipam:
      driver: default
      config:
        - subnet: 172.16.10.0/24
          gateway: 172.16.10.1

Es seht auch so aus, als wenn man den Pfad zum dockerfile relativ angeben muss. Dazu müsste man allerdings wissen wo qnap die images innerhalb von docker ablegt.
godlie
godlie 04.01.2024 um 14:34:34 Uhr
Goto Top
Hallo,

sorry für die späte Antwort, ging im Frühjahrsemailverkehr etwas unter.

Das mit dem Build sollte nicht so das Thema sein, ich denke ihm fehlt hier der context.
context gibt an wo das ganze hingebaut werden soll.
dockerfile sollte dann egal sein wo es liegt

Dein no-cache glaube ich gibs so gar nicht mehr in der v3

https://docs.docker.com/compose/compose-file/compose-file-v3/#context

build:
  context: .
  dockerfile: Dockerfile-alternate

grüße