Forum: PC Hard- und Software docker-compose mapping internal ports


von Stefan H. (Firma: dm2sh) (stefan_helmert)


Lesenswert?

Hallo,

ich möchte bei docker-compose den internen Port 8080 eines Containers 
nicht auf den externen Port 80 des Hosts mappen, sondern auf den Port 80 
des internen named Network.

Wie kann ich nun dieses interne Mapping umsetzen?

Also das geht nicht:
1
  webservice:
2
    build: "myservice"
3
    networks:
4
      - frontend
5
    ports:
6
      - 8080:80

weil hier der interne Port 8080 von "myservice" auf den Host Port 80 
gemapped wird. Der soll aber von Port 8080 von "myservice" auf das 
Netzwerk "frontend" Port 80 gemapped werden.

von DockerDoc (Gast)


Lesenswert?

Stefan H. schrieb:
> ich möchte bei docker-compose den internen Port 8080 eines Containers
> nicht auf den externen Port 80 des Hosts mappen, sondern auf den Port 80
> des internen named Network.

Das geht nicht von "außerhalb", das muss der Container intern selber 
machen.
Dein docker-compose Netzwerk ist am Ende eine Bridge, jeder Container 
hängt da mit seinem eigenen veth-Pärchen dran.
mit den "ports"-Angaben im compose-file erzeugst du Port-Weiterleitungen 
vom Host auf die Bridge.

Lösungsansätze (ohne Anspruch auf Vollständigkeit)

1) im "msyservice/Dockerfile" direkt auf Port 80 Umkonfiguriern 
(Allerdings: Sicherheitsrelevant, der Prozess im Container braucht dann 
zumindest bei Startup root)

2) Configfile im myservice von aussen (volume mount) austauschen auf 
port 80. (auch wieder root im container benötigt)

3) myservice mit CAP_(NET?)ADMIN starten, im Startup-File von myservice 
ein Portforwarding einrichten (iptables -t nat -I ...., auch 
sicherheitsrelevant)

4) minimalen Zusatz-Container dazusetzen, der nur eine "webservice:8080 
-> portchanger:80" Umsetzung macht. wieder per iptables, oder per 
reverse-proxy.

5) andere Container in deinem compose-file konfigurieren, dass sie auf 
webservice:8080 zugreifen.



Aus Sicherheitsaspekten ist (5) am besten, (4) mit iptables auch 
durchaus OK, weil in 4 nach dem Setup der Container nur noch ein "sleep 
forever" ausführen muss, d.H. kaum Angriffsfläche.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.