NEWS
USB in Docker via neuer Container über Compose u.a. andere
-
-
@chrisham sagte in USB in Docker via neuer Container über Compose u.a. andere:
3.) Hostmode: ich denke, in der bisherigen Config hatte ich den host-Mode gewählt:
Wie würde ich den im docker-compose einstellen?eingerückt unter dem abschnitt mit dem service. also so ungefähr
iobroker: network_mode: "host"
hier die beschreibung von buanet
https://smarthome.buanet.de/2020/09/macvlan-ueber-portainer-einrichten/
für docker-compose wird es bei dieser überschrift interessant
Umsetzung mit docker-compose aka "Portainer Stacks"...
aber auch die vorhergehenden abschnitte sorgfältig lesen.wenn du probleme hast meld dich.
jier ein screenshot der netzdefinition aus dem portainer
ein teilsegment kannst du mit dem netzwerkrechner von heise berechnen
https://www.heise.de/netze/tools/netzwerkrechner/aus der angabe 192.168.1.80/28 kann man dann entnehmen,
das dann nur ein ip bereich von .80 bis .95 zur Verfügung steht.IP-Adresse: 192.168.1.80 CIDR-Suffix: 28 Netzwerkmaske: 255.255.255.240 Inverse Netzwerkmaske:0.0.0.15 Anzahl Hosts:14 Netzadresse:192.168.1.80 Broadcast:192.168.1.95 Host-IPs von:192.168.1.81 bis:192.168.1.94
das kann man dann für die einzelnen container zuordnen. aber nicht jeder container benötigt wirklich eine eigene ip.
macvlan wirkt dann netzwerktechnisch genauso wie wenn das ein eigenständiger rechner wäre. daher dann auch kein portmapping mehr und der broadcast funktioniert dann auch
der bereich kann auch größer gewählt werden. der nächst größere bereich wäre dann 30 ip adressen (einstellbar über den cidr wert. allerdings verschiebt sich dann auch die komplette ip-range -
@oliverio Strike! Du hast mal wieder in Schwarze getroffen:
- KNX-Adapter verbindet mit Gerät:
Natürlich musste ich bei influxdb jetzt wieder zurückstellen auf "localhost". Und im compose-File mussten dann die
networks: iobroker-4:
wieder rausgenommen werden. Aber so ist erstmal alles ok soweit, d.h. die Adapter sind grün.
Noch zum tieferen Verständnis: Du schreibst "...dann muss man leider den network mode ändern."
Was hat der host-Mode denn für Nachteile? Also ggü der vorigen Config mit "networks" oder ggf. auch ggü dem "macvlan"?Jetzt muss ich mich noch um die Linux-Pakete kümmern, da gibts auch noch Probleme, das asterisk-paket wird nicht richtig installiert, muss ich mal log analysieren...
- KNX-Adapter verbindet mit Gerät:
-
@marc-berg @Glasfaser : jetzt gehts um die Linux-Paket, bis auf das asterisk hat es geklappt:
Anbei das log-file:
setup_packages.logIdeas?
-
@chrisham sagte in USB in Docker via neuer Container über Compose u.a. andere:
Ideas?
Asterisk wird nicht mehr direkt von Debian für 'Bookworm' gepackt:
-
@chrisham
Host Mode ist so der Notnagel für genau solche Fälle.
https://docs.docker.com/network/drivers/host/Nachteil
keine Isolation des Container/Service Netzwerks Lösung Bridge oder macvlan
Wenn man mehrere Container betreibt die alle den gleichen Port verwenden muss man auf ungewöhnliche Ports Mappen (wie bei Bridge auch) Lösung macvlanVorteil
Bessere Performance da der Netz erlebt nicht durch weitere prozessschichten verarbeitet wirdWenn du es einfach haben willst bleib bei Host
Ggfs kannst mal macvlan probieren
Das tolle an docker ist, das man relativ gefahrlos solche Konfigurationen hin und her ändern kann -
@thomas-braun sagte in USB in Docker via neuer Container über Compose u.a. andere:
@chrisham sagte in USB in Docker via neuer Container über Compose u.a. andere:
Ideas?
Asterisk wird nicht mehr direkt von Debian für 'Bookworm' gepackt:
Ja das ist aber blöd
Ist zwar noch nicht ganz Ende, aber dauert wohl eine Weile nochDann bleibt dir nur noch das durch ein Skript zu installieren
Die Vorgehensweise aus dem Dokument müsste man in ein Shell Skript packen
Das es im Container installiert wird.Oder du suchst dir aus einer anderen Quelle nach eine deb Datei und installierst es über einskript aus dieser.
-
@chrisham sagte in USB in Docker via neuer Container über Compose u.a. andere:
@marc-berg @Glasfaser : jetzt gehts um die Linux-Paket, bis auf das asterisk hat es geklappt:
Ich habe den Thread jetzt nicht im Detail verfolgt, aber ist es denn zwingend erforderlich, Asterisk mit in den ioBroker Container zu packen? Es gäbe ja auch fertige Asterisk Docker Images.
Wenn notwendig, dann ist ja das Userscript "userscript_firststart.sh" das Richtige, um die notwendigen Schritte zur Installation zu hinterlegen. Dieses Script wird einmalig nach dem ersten Start eines Containers ausgeführt, bzw. nach jedem "Recreate".
Den Link zur Installation hat ja @OliverIO schon verlinkt, wobei man sagen muss, dass dort ja keine reine Installation vorgenommen wird, sondern Asterisk kompiliert + installiert wird. Das bedeutet, dass auch alle Werkzeuge zum Kompilieren mit eingebaut werden müssen (weiß jetzt nicht, ob das alles schon im ioBroker Image steckt).
Alles nicht schön, aber wahrscheinlich machbar. -
ich hatte auch schon mal nach docker image geschaut, aber kein offizielles gefunden.
die asterix leute überlegen noch und tendieren wohl eher keins bereitzustellen, weil es wohl viele individuelle szenarien gibt.
aber da cih asterix nicht nutzte kann ich das nicht beurteilen.ob man ein image aus einer Zweitquelle nutzt muss man selber entscheiden.
zumindest kann man hier support erhalten.
https://github.com/andrius/asterisk
zunächst wollt ich schon sagen, das man hier auch pech hat, weil er bspw bei alpine sich asterix aus einem repo isntalliert, aber bei debian wird alles kompiliert.
also in einem separaten container wird wahrscheinlich die beste lösung sein -
@oliverio @Marc-Berg : Ok, danke für die Hinweise.
-
Händische Installation: das müsste ja erstmal weiterhin gehen, also im IOBroker-Docker-Container über
apt-get install asterisk
nachteil ist halt, bei jedem Container-Udate ist es wieder verloren -
Separater container: da gibt es ja jede Menge, also wenn ich über DSM-docker-Image search gehe:
der erste ist wohl der auf (https://github.com/andrius/asterisk) verlinkte Docker.
Aber dann muss ich die Container (IOBroker und Astersik-Container) irgendwie im "Multi-Host" oder "Master-Slave"-Mode betreiben, richtig? Denn der Adapter in IOBroker muss ja direkt auf die Linux-Prozesse im Asterisk-Container zugreifen können, oder sehe ich das falsch?
-
-
@chrisham Ich habe jetzt mal asterisk über den andrius/... container mit ins compose aufgenommen und den container instantiiert.
Leider kann sich der Asterisk-Adapter in IOBroker nicht mit dem asterisk-Manager (Prozess) im separaten container connecten:
Jetzt geht wieder die suche los:
a) liegt es daran, dass verbindung zwischen den containern (iobroker -> asterisk) nicht möglich ist (host, slave,...)?=
b) oder liegt es daran, dass evtl. der asterisk-prozess im container gar nicht gestartet ist...... und alles immer noch um den USB-Port zum Laufen zu bringen...
-
Dann sag mal was du wo wie konfiguriert hast.
Von alleine finden sich die Container natürlich nichtErinnere dich an influx. Der servicename kann als hostname verwendet werden,
Sofern sie im gleichen Netzwerk zusammengeschaltetet wurden -
@oliverio Klar:
- docker-compose setup (mit neuem asterisk-container):
version: '3' services: iobroker: network_mode: "host" restart: always image: buanet/iobroker:latest container_name: iobroker-4 hostname: iobroker-4 ports: - "8081:8081" - "3671:3671" volumes: - /volume1/docker/iobroker-Chrisham:/opt/iobroker - /volume1/docker/userscripts:/opt/userscripts - /volume1/docker/Backup:/opt/backup/ environment: - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin - DEBIAN_FRONTEND=teletype - LANG=de_DE.UTF-8 - LANGUAGE=de_DE:de - LC_ALL=de_DE.UTF-8 - SETGID=1000 - SETUID=1000 - TZ=Europe/Berlin - USBDEVICES=/dev/ttyUSB0 - PACKAGES=influxdb2-cli devices: - /dev/ttyUSB0:/dev/ttyUSB0 asterisk: restart: always image: andrius/asterisk:latest container_name: asterisk-4 ports: - "5038:5038" environment: - PACKAGES=ffmpeg lame sox libsox-fmt-mp3 influxdb: restart: always image: influxdb:latest container_name: influxdb-4 ports: - "8086:8086" volumes: - /volume1/docker/influxdb/config:/etc/influxdb2 - /volume1/docker/influxdb/data:/var/lib/influxdb2 environment: - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin - GOSU_VER=1.12 - INFLUXDB_VERSION=2.7.1 - INFLUX_CLI_VERSION=2.7.3 - INFLUX_CONFIGS_PATH=/etc/influxdb2/influx-configs - INFLUXD_INIT_PORT=8086 - INFLUXD_INIT_PING_ATTEMPTS=600 - DOCKER_INFLUXDB_INIT_CLI_CONFIG_NAME=default - DOCKER_INFLUXDB_INIT_MODE=setup - DOCKER_INFLUXDB_INIT_USERNAME=iobroker - DOCKER_INFLUXDB_INIT_PASSWORD=*1Xs(QD5gY0!B&XHe1_x - DOCKER_INFLUXDB_INIT_ORG=smarthome - DOCKER_INFLUXDB_INIT_BUCKET=iobroker grafana: restart: always image: grafana/grafana:latest container_name: grafana-4 ports: - "3000:3000" volumes: - /volume1/docker/grafana:/var/lib/grafana - /volume1/docker/grafana:/var/lib/grafana/plugins
Und im Asterisk-Adapter sieht es dann so aus:
Was wäre noch relevant?
-
Was steht im Log von ioBroker?
Funktioniert Asterix?
Läuft der Container? -
@oliverio Anbei die Infos.
-
log IOBroker:
-
Asterisk Funktionalität geht natürlich nicht, d.h. ich kann die Telefonanrufe nicht absetzen
Das ist konzeptionell so: Blocklyscript --> Asterisk --> Fritzbox --> Telefonanruf -
Asterisk-Container
Der läuft, es gibt auch ein längeres Log mit dem Eintrag "Asterisk Ready" am Ende, aber davor auch mit mehreren Warnungen "cel_wqlite3_custom declined to load,... usw"
Anbei das log-file:
asterisk-4.csv
-
-
ein paar errors sind auch drin. allerdings kann ich nicht bewerten ob das hinnehmbare fehler sind.
normalerweise ist error, was man korrigieren muss, warning sollte man prüfen, aber stört erstmal das programm nicht. vielleicht hast du ja noch ein logfile vom altern asterix. dann kannst du da mal vergleichenaber was du zuerst ausprobieren kannst:
ich habe gesehen, das hier port 5060 verwendet wird.
d.h. anstatt 5038 musst du im docker config 5060 eintragen
und wenn der container neu erstellt wurde dann in der adapterkonfiguration auch 5060 -
@oliverio said in USB in Docker via neuer Container über Compose u.a. andere:
ein paar errors sind auch drin. allerdings kann ich nicht bewerten ob das hinnehmbare fehler sind.
normalerweise ist error, was man korrigieren muss, warning sollte man prüfen, aber stört erstmal das programm nicht.Ja, die Fehler sind für mich auch erstmal etwas kryptisch, wüsste spontan auch nicht, ob die a) relevant sind für das Connection-Problem und b) wie ich sie beseitigen würde, es ist ja erstmal einfach der Standard container erzeugt worden, wenn es da schon Probleme gibt.
vielleicht hast du ja noch ein logfile vom altern asterix. dann kannst du da mal vergleichen
Beim alten asterisk, also dem ganz ursprünglichen wo es funktionierte, war es ja so, dass ich das asterisk (und die anderen Linux-Pakete) manuell (über apt-get install asterisk) installierte. Aber diese Option scheint es ja jetzt grundsätzlich nicht mehr zu geben, da das debian-Paket nicht mehr angeboten wird, sonst würde die Installation ja auch über die container-compose erzeugung funktionieren. Also von daher: da habe ich leider kein log-file mehr bzw. bin mir auch nicht sicher, ob es da überhaupt (auf Container-Ebene) einen log-Eintrag für so ein nachträglich installiertes Linux-Paket gegeben hätte.aber was du zuerst ausprobieren kannst:
ich habe gesehen, das hier port 5060 verwendet wird.
Hmm, ah ok, was meinst du genau mit "... hier port 5060 verwendet wird..."? Also, wo hast du das gelesen, in der Doku vom andrius container? Also da war tatsächlich eine Inkonsistenz meinerseits: in der config, die ich hier gepostet hatte, stand 5038, aber in der portainer-config war schon 5060 eingetragen. Ich habe es dennoch nochmals "from scratch" neu erstellt, leider mit dem gleichen negativen Ergebnis...
hier nochmals das log-file von diesem versuch:
asterisk-5 (1).csvd.h. anstatt 5038 musst du im docker config 5060 eintragen
und wenn der container neu erstellt wurde dann in der adapterkonfiguration auch 5060
In der Adapter-config steht definitiv 5060 drin.
Noch was anderes (keine Ahnung ob das relevant ist), was mir aufgefallen ist: den asterisk-container zu betreten, einmal über ein Terminal über DSM-GUI klappt auch nicht, siehe Fehlermeldung:
Dann habe ich über cmd-Shell versucht, den Container zu betreten:
sudo docker exec -u 0 -it c6a9ade9eac7 bash
Das ging natürlich auch nicht, dafür aber mit
sudo docker exec -u 0 -it c6a9ade9eac7 shEs gibt also wohl ein bash-script, sondern ein sh-script. Ist aber wohl für das vorliegende Problem irrelevant.
Trotzdem ist es strange, wie sich dieser container "im innern" präsentiert:
Normalerweise steht da an der Prompt-Eingabe im Terminal immer der Container-Name:
Soll ich vllt. einmal einfach einen anderen (also nicht den andrius ) container-image versuchen für asterisk....?
Aber zwischendurch mal einfach ein dickes DANKESCHÖN an dich, echt klasse der Support, und mit viel Geduld !!
-
-
port 5060
oben in der geposteten asterix docker konfiguration stand noch 5038. der ersteller des dockerimages hat innendrin 5060 gewählt. das muss natürlich durchgängig passen. sonst erreichen sich die beiden dienste nie -
console im container öffnen
@chrisham sagte in USB in Docker via neuer Container über Compose u.a. andere:
Noch was anderes (keine Ahnung ob das relevant ist), was mir aufgefallen ist: den asterisk-container zu betreten, einmal über ein Terminal über DSM-GUI klappt auch nicht, siehe Fehlermeldung
ja, das hängt immer stark vom container ab. innerhalb des containers läuft ein komplett eigenständiges betriebssystem. da es ja um die eigentliche applikation geht, macht man da nur das mindeste rein was man braucht. beim latest wird alpine als basis betriebssystem genutzt. die bieten momentan so ziemlich das kleinste basis image an und ist für docker super.
da ist allerdings kein bash drin, sondern ash (wie bei linux üblich gibt es von allem oft mehrere varianten. portainer macht das auch so, das standardmäßig immer /bin/bash wird, dort kann man aber auch /bin/sh auswählen. das wäre eigentlich der richtigere befehl, da sich damit immer das standard shell des betriebssystems öffnet
auch pakete nachträglich noch installieren (nicht empfohlen, da bei der nächsten regeneration weg) ist bei alpine wieder ein anderer befehl. da muss man dann leider nachschauen- innenleben des containers
@chrisham sagte in USB in Docker via neuer Container über Compose u.a. andere:
Trotzdem ist es strange, wie sich dieser container "im innern" präsentiert:
warum, sieht doch gut aus. ist das standard dateisystem von linux.
wie oben geschrieben. container ist nix anderes als ein kommplett virtualisiertes betriebssystem, das komplett abgekapselt vom normalen betriebssystem läuft.
das benötigt natürlich auch sein seine dateistruktur. irgendwo da ist dann asterix auch installiert ( /var/lib/asterix + noch ein paar weitere verwendete verzeichnisse, start ist von /var/sbin/asterix aus)
die shell datei docker_entrypoint ist das startskript, welches dann docker aufruft, sobald der container meldet, das er läuft. in dem startskript steht dann drin wie die eigentliche anwendung dann gestartet wird.- prompt
@chrisham sagte in USB in Docker via neuer Container über Compose u.a. andere:
Normalerweise steht da an der Prompt-Eingabe im Terminal immer der Container-Name:
bei docker innen drin gibt es kein normalerweise. das ist alles dem container ersteller überlassen. dieser hat dem shell halt bei der erstellung nicht gesagt, wie das prompt aussehen soll. meist legt ein dockercontainer beim start einen eigenen group/user an. auch hier wird eine gruppe und ein user "asterix" angelegt.
anpassen kannst du das mit
https://wiki.ubuntuusers.de/Bash/Prompt/#:~:text=Ein persönlicher Prompt kann die,wie mit Farben gearbeitet wird.
allerdings gilt das für bash. evtl gehen ein paar dinge bei ash da nichtwenn dir ein debian basiertes image lieber ist, dann kannst du im dockerkonfigurationsdatei als image anstatt andrius/asterix:latest ein andrius/asterisk:1.4-debian angeben.
allerdings ist das schon 2 jahre alt. er macht wohl keine debian images mehr. -
-
@oliverio Ok, danke.
Ich habe jetzt mal noch weiter in den asterisk container reingeschaut, da steht in etc/asterisk/manager.conf das:
basierend auf welcher Info hast du das: "der ersteller des dockerimages hat innendrin 5060 gewählt."?
-
@chrisham sagte in USB in Docker via neuer Container über Compose u.a. andere:
basierend auf welcher Info hast du das: "der ersteller des dockerimages hat innendrin 5060 gewählt."?
das steht hier. das ist das dockerfile für die alpine version.
da wird definiert auf welchem basis image das besteht, welche packete installiert werden sollen und was sonst noch eingerichtet werden muss
https://github.com/andrius/asterisk/blob/ef1c958d45eacfc301b80f8b0de079d43254a02b/alpine/Dockerfile.erb#L29aber wie gesagt ich habe keine ahnung welcher port für was ist.
dann kannst du im docker config mal einfach noch den 5038 dazuschreiben5038:5038
alternativ kannst du bei dem asterix container auch mal noch den hostmode aktivieren