Unterschied zwischen ports und expose in docker-compose

1

Was ist der Unterschied zwischen "ports" und "expose" in docker-compose docker-compose.yml?

Noch keine Stimmen abgegeben
1 Kommentar
  • EXPOSE dient nur der Dokumentation, es werden keine Ports offengelegt.
    von matthias am 3 Feb. 2022
  • 17 Feb. 2023

    In einer Docker Compose-Datei dienen die Optionen ports und expose unterschiedlichen Zwecken.

    Die Option ports wird verwendet, um Ports vom Container auf den Host abzubilden. Sie definiert eine Liste von Port-Zuordnungen im Format HOST_PORT:CONTAINER_PORT. Die folgende Ports-Konfiguration ordnet zum Beispiel Port 80 auf dem Host dem Port 8080 im Container zu:

    services:
      web:
        image: nginx
        ports:
          - "80:8080"
    

    Mit dieser Konfiguration kann man unter http://localhost:80 auf dem Hostrechner auf den im Container ausgeführten Webserver zugreifen.

    Andererseits wird die Option expose verwendet, um Ports aus dem Container für andere Container im selben Netzwerk verfügbar zu machen. Es definiert eine Liste von Ports, die offengelegt, aber nicht dem Host zugeordnet sind. Die folgende Expose-Konfiguration macht beispielsweise Port 8080 im Container verfügbar:

    services:
      web:
        image: nginx
        expose:
          - "8080"
    

    Mit dieser Konfiguration können andere Container im selben Netzwerk auf den Webserver zugreifen, der innerhalb des Containers unter http://web:8080 läuft.

    Also nochmal zusammengefasst:

    • ports Container-Ports den Host-Ports zuordnet und ermöglicht so den Zugriff von außen
    • expose macht nur die Container-Ports für andere Container im selben Netzwerk zugänglich
    Noch keine Stimmen abgegeben
    Noch keine Kommentare
  • 8 Feb. 2022

    Wie ich schon im Kommentar geschrieben habe, dient EXPOSE im Dockerfile nur zur Dokumentation:

    The EXPOSE instruction does not actually publish the port. 
    It functions as a type of documentation between the person who builds the image and the person who runs the container, 
    about which ports are intended to be published.
    

    Die Ports, die mit EXPOSE definiert sind, werden dann mit docker run -P ... im Host veröffentlicht.

    Bei expose in Docker Compose werden die Ports auch nicht im Host offengelegt, aber innerhalb der in der Compose-Datei festgelegten Services verfügbar.

    Abgestimmt in Verständlich, Hilfreich
    1 Kommentar
    • expose im Dockerfile ist nicht das gleiche wie in docker-compose
      von TheSupervisor am 17 Feb. 2023