cgiproxy als Docker-Container auf der DiskStation

Status
Für weitere Antworten geschlossen.

3x3cut0r

Benutzer
Mitglied seit
21. Mai 2011
Beiträge
507
Punkte für Reaktionen
15
Punkte
44
Hi
ich würde gerne cgiproxy (https://www.jmarshall.com/tools/cgiproxy/) auf meiner DS laufen lassen.
Da es nativ wegen perl und ein paar Problemen beim Installieren des scripts nicht funktioniert, habe ich mich für das Docker image entschieden:
https://hub.docker.com/r/ciiss0u/docker-cgiproxy/
Docker-Container Laden und Starten, fertig.

Jetzt stehe ich aber vor einem Problem, das ich bei Docker bisher nicht so ganz verstanden habe.
Wie nutze ich denn jetzt das cgi-script, das sich im Docker-Container befindet, auf meinem Host? (/opt/cgiproxy/nph-proxy.cgi)
Es gibt kein VOLUME und kein EXPOSE im Dockerfile. Ist das ein Designfehler des Entwicklers?

Wie mache ich generell Dateien in Containern auf dem Host nutzbar.
So wie ich das verstanden habe machen VOLUMEs ja nur das gegenteilige ... Dateien des Hosts im Container nutzbar...

Danke für Anregungen.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Container stellen eine isolierte(!) Laufzeitumgebung bereit, im Grunde ähnlich wie die unter Linux schon ewig bekannten "jails", nur mit zusätzlichen Sicherheitsmerkmalen.
Dabei sieht ein Container nur "seine Welt".

Auch wenn im Dockerfile weder VOLUME noch EXPOSE deklariert sind, hält dich niemand davon ab einzelne Dateien oder Verzeichnisse aus dem Host in den Container einzublenden (Achtung: ersetzt dabei die Datei bzw. den Inhalt des Pfads vollständig!). Genauso kannst Du auch beliebige Ports vom Host in den Container mappen.

Sprich: Wenn Dateien über das Dateisystem zwischen Host und Container ausgetauscht werden sollen, dann geht es nur über Volumes.

Der Zugriff mit Clients auf Dienste funktioniert dabei natürlich in beide Richtungen, solange a) beim Zugriff von Host auf Container der Port gemapped wurde (oder der Host mit net=host gestartet wurde) und b) die Firewall vom Host den Container nicht unterbindet auf einen Host-Service zuzugreifen.

Wenn Du Deinen UseCase besser beschreibst, könnte man dir besser weiterhelfen... selbst wenn am Ende die Erkentnis rauskommt, dass Du eigentlich eine VM verwenden musst um Dein Problem zu lösen.
 

3x3cut0r

Benutzer
Mitglied seit
21. Mai 2011
Beiträge
507
Punkte für Reaktionen
15
Punkte
44
Danke für die kurze Erklärung. Das bestätigt dann meine Vermutung/Aussage.
D.h. Docker-Container machen nur sinn, wenn sie einen Service hinter einem Port bereitstellen.

Jetzt nochmal zu meinem Fall mit cgiproxy.
cgiproxy ist ein cgi script, das unter perl läuft. Aufrufen tut man es mittels apache oder nginx über den browser ( http://<ip_der_nas>/nph-proxy.cgi )
Wenn aber mein script jetzt in einem docker container läuft und das dortige perl benutzt, kann ich es ja vom host nicht aufrufen.
Jetzt frage ich mich was hat dieser Container dann für einen sinn?
Er würde erst dann sinn machen, wenn der Container auch den Apache bereit stellt und das script hinter einem Port an den Host weitergibt.
Sodass ich dann das script über "http://<ip_der_nas>:<port_des_containers>/nph-proxy.cgi" aufrufen kann.
oder übersehe ich etwas?
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Im Dockerfile sind die Ports 443 und 8002 angegeben. Versuch die mal zu Mappen und darauf mit einem Browser zuzugreifen.
Nachdem weder Apache noch nginx installiert werden, würde ich vermuten, dass es auch als Standalone-Lösung betrieben werden kann.

Beispielweise ist synocommunity/spksrc ein Image, dass auch ohne Port-Mapping sinn ergibt: es ist die vorkonfigurierte Toolchain der SynoCommunity.
Wenn man die SynoCommunity Sources aus github auscheckt, kann man damit selber seine eigenen SPK-Pakete bauen. Am Ende will man ja nur die kompilierte SPK haben ;)

Aber stimmt schon, in der Regel ist der Prozess (bzw. die Prozesse) über einen oder mehrere Ports von aussen erreichbar. Oftmal werden Webanwendungen in Container gesperrt, wo eben über TCP ein Zugriff auf einen HTTP-Server stattfindet. Oder im Fall einer DB über den Port das Datenbank-Spezifische Roh-Protokoll gesprochen wird.
 
Zuletzt bearbeitet:

3x3cut0r

Benutzer
Mitglied seit
21. Mai 2011
Beiträge
507
Punkte für Reaktionen
15
Punkte
44
Beide Ports funzen nicht.
Wenn ich mir die Anleitung von cgiproxy anschaue muss man das auch mit nem apache oder nginx koppeln. Das ist in dem Container ja nicht passiert.
Irgendwie werd ich daraus nicht schlau. Es fehlt ja auch leider eine Beschreibung von ciiss0u.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat