Docker Port wird nicht angezeigt

sharbich

Benutzer
Mitglied seit
08. Jan 2023
Beiträge
11
Punkte für Reaktionen
0
Punkte
1
Hallo Ihr Lieben,
ich habe mir über docker compose.yaml einen container erstellt:
YAML:
version: "3.3"
services:
    portainer:
      image: portainer/portainer-ce:latest
      container_name: portainer
      restart: always
      networks:
        macvlan25:
          ipv4_address: 192.168.25.2
      privileged: true
      volumes:
        - ./data:/data
        - /var/run/docker.sock:/var/run/docker.sock
      ports:
        - "192.168.25.2:9443:9443"

      networks:
        macvlan25:
          ipv4_address: 192.168.25.2

networks:
  macvlan25:
    external: true
im docker wird folgendes angezeigt:
Bash:
CONTAINER ID   IMAGE                           COMMAND        CREATED         STATUS         PORTS     NAMES
3fa49b24140d   portainer/portainer-ce:latest   "/portainer"   8 seconds ago   Up 5 seconds             portainer
Warum wird mir kein Port angezeigt? Inhalte aus der container Datei:
Code:
[
    {
        "Id": "3fa49b24140d6cad6323ccdbd9edba313cb7b6271782016bbd5d194bfed1ff30",
        "Created": "2023-01-08T16:02:34.394741032Z",
        "Path": "/portainer",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 91315,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2023-01-08T16:02:37.098570543Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
...
        "Name": "/portainer",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "unconfined",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/var/run/docker.sock:/var/run/docker.sock:rw",
                "/opt/containerd/portainer/data:/data:rw"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "macvlan25",
            "PortBindings": {
                "9443/tcp": [
                    {
                        "HostIp": "192.168.25.2",
                        "HostPort": "9443"
                    }
                ]
            },
...
            "Hostname": "3fa49b24140d",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "8000/tcp": {},
                "9000/tcp": {},
                "9443/tcp": {}
            },
...
       "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "aede61693e3a05569e67272eb26b6d662e7502f1e580063c943b5298cb72bad8",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/aede61693e3a",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "macvlan25": {
                    "IPAMConfig": {
                        "IPv4Address": "192.168.25.2"
                    },
                    "Links": null,
                    "Aliases": [
                        "3fa49b24140d",
                        "portainer"
                    ],
                    "NetworkID": "161cd4e3c342bf087573a1c6ec35e82bc07c87efa7b6e4d45e7186e33a6526bc",
                    "EndpointID": "6e3054919d1e06db12db47ec45f9bf7b9fdbaac6de4b330f0e9add6bc7eab58c",
                    "Gateway": "192.168.25.1",
                    "IPAddress": "192.168.25.2",
                    "IPPrefixLen": 24,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:c0:a8:19:02",
                    "DriverOpts": null
                }
            }
        }
    }
]
 
Zuletzt bearbeitet:

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
15.029
Punkte für Reaktionen
5.400
Punkte
564
Willkommen hier im Forum!
Erreichst du den erstellten Portainer auf dem Port?
Das liegt daran, dass Ports nicht angezeigt werden, wenn der Container im MACVLAN läuft (zumindest in Portainer sehe ich dann keine Ports).
"192.168.25.2:9443:9443"
Das dürfte so auch falsch sein. Korrekt wäre "9443:9443"

EDIT: Und das mit Netzwerken sieht auch nicht korrekt aus. Du erstellst das Netzwerk ja 3 mal. Und dass man einfach so mir nix dir nix ein MACVLAN in einer YAML erstellen kann, glaube ich nicht. Zumindest nicht in der Einfachheit, in der du das getan hast
 
  • Like
Reaktionen: EDvonSchleck

EDvonSchleck

Gesperrt
Mitglied seit
06. Mrz 2018
Beiträge
4.703
Punkte für Reaktionen
1.119
Punkte
214
Da wird wohl etwas mit MacVlan nicht stimmen, lass das weg und installiere es herkömmlich!
 

sharbich

Benutzer
Mitglied seit
08. Jan 2023
Beiträge
11
Punkte für Reaktionen
0
Punkte
1
Hier meine "docker network ls" Informationen und den Inhalt von macvlan25
Code:
NETWORK ID     NAME        DRIVER    SCOPE
932735aa6eea   bridge      bridge    local
34810cc394a6   host        host      local
161cd4e3c342   macvlan25   macvlan   local
35a53afe907f   none        null      local
Code:
[
    {
        "Name": "macvlan25",
        "Id": "161cd4e3c342bf087573a1c6ec35e82bc07c87efa7b6e4d45e7186e33a6526bc",
        "Created": "2023-01-08T11:28:33.27766691+01:00",
        "Scope": "local",
        "Driver": "macvlan",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "192.168.25.0/24",
                    "IPRange": "192.168.25.2/24",
                    "Gateway": "192.168.25.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "3fa49b24140d6cad6323ccdbd9edba313cb7b6271782016bbd5d194bfed1ff30": {
                "Name": "portainer",
                "EndpointID": "6e3054919d1e06db12db47ec45f9bf7b9fdbaac6de4b330f0e9add6bc7eab58c",
                "MacAddress": "02:42:c0:a8:19:02",
                "IPv4Address": "192.168.25.2/24",
                "IPv6Address": ""
            }
        },
        "Options": {
            "parent": "bond0.25"
        },
        "Labels": {
            "com.docker.compose.network": "macvlan25",
            "com.docker.compose.project": "portainer",
            "com.docker.compose.version": "1.29.2"
        }
    }
]
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
15.029
Punkte für Reaktionen
5.400
Punkte
564
Kannst du nun auf den Portainer zugreifen oder nicht? Und warum überhaupt MACVLAN? Macht bei Portainer denke ich wenig Sinn.
Im Zweifel erstmal Portainer ohne MACVLAN installieren. Dann MACVLAN im Portainer anlegen und ebenfalls im Portainer den Portainer im MACVLAN installieren und dann den ersten Portainer entfernen

Ich glaube, ich habe noch nie so oft "Portainer" geschrieben :)
 

sharbich

Benutzer
Mitglied seit
08. Jan 2023
Beiträge
11
Punkte für Reaktionen
0
Punkte
1
Mein Problem ist das ich über Nginx Proxy deshalb auch kein redirect hinbekommen. Hier meine portainer.conf Datai.
Code:
root@dsme01:~# cat /etc/nginx/sites-enabled/portainer.conf
server {
        listen 80;
        listen [::]:80;
        server_name portainer.intern.example.com;

        return 301 https://portainer.intern.example.com;
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name portainer.intern.example.com;

        ssl_certificate /etc/ssl/certs/portainer.intern.example.com.crt;
        ssl_certificate_key /etc/ssl/private/portainer.intern.example.com.key;

        location = /404.html {
                internal;
        }

        location / {
             proxy_http_version 1.1;
             proxy_set_header Host $host;
             proxy_set_header Connection "";
             proxy_pass https://192.168.25.2:9443/;
        }

        location /api/websocket/ {
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";
             proxy_http_version 1.1;
             proxy_pass https://192.168.25.2:9443/api/websocket/;
        }
}
 

sharbich

Benutzer
Mitglied seit
08. Jan 2023
Beiträge
11
Punkte für Reaktionen
0
Punkte
1
Und dass man einfach so mir nix dir nix ein MACVLAN in einer YAML erstellen kann, glaube ich nicht.
Das macvlan25 habe ich am Anfang so erstellt:
Code:
docker network create -d macvlan \
    --subnet=192.168.25.0/24 \
    --gateway=192.168.25.1 \
    -o parent=bond0.50 macvlan25
 

sharbich

Benutzer
Mitglied seit
08. Jan 2023
Beiträge
11
Punkte für Reaktionen
0
Punkte
1
Ich habe macvlan25 eingericht um aus meinen Netzwerk (192.168.0.0/16) auf das Docker Netwzerk (172.17.0.0/16) zugreifen zu können. Sonst wüsste ich nicht wie ich das Routing einrichten sollte.
Routing Table Server
Code:
root@dsme01:~# route
Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
default         192.168.20.1    0.0.0.0         UG    0      0        0 bond0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.20.0    0.0.0.0         255.255.255.0   U     0      0        0 bond0
192.168.110.0   0.0.0.0         255.255.255.0   U     0      0        0 bond0.110
192.168.120.0   0.0.0.0         255.255.255.0   U     0      0        0 bond0.120
192.168.130.0   0.0.0.0         255.255.255.0   U     0      0        0 bond0.130
192.168.140.0   0.0.0.0         255.255.255.0   U     0      0        0 bond0.140
192.168.150.0   0.0.0.0         255.255.255.0   U     0      0        0 bond0.150
192.168.190.0   0.0.0.0         255.255.255.0   U     0      0        0 br0
192.168.200.0   0.0.0.0         255.255.255.0   U     0      0        0 bond0.200
Routing Table zentraler Router
Code:
root@rome01:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    0      0        0 eth2
192.168.0.0     *               255.255.255.248 U     0      0        0 eth2
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0.1
192.168.10.0    *               255.255.255.0   U     0      0        0 eth0.50
192.168.20.0    *               255.255.255.0   U     0      0        0 eth0.20
192.168.25.0    *               255.255.255.0   U     0      0        0 eth0.25
192.168.30.0    *               255.255.255.0   U     0      0        0 br-wlan
192.168.100.0   *               255.255.255.0   U     0      0        0 eth0.100
192.168.110.0   *               255.255.255.0   U     0      0        0 eth0.110
192.168.120.0   *               255.255.255.0   U     0      0        0 eth0.120
192.168.130.0   *               255.255.255.0   U     0      0        0 eth0.130
192.168.140.0   *               255.255.255.0   U     0      0        0 eth0.140
192.168.150.0   *               255.255.255.0   U     0      0        0 eth0.150
192.168.190.0   *               255.255.255.0   U     0      0        0 eth0.10
192.168.200.0   *               255.255.255.0   U     0      0        0 eth0.200
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
15.029
Punkte für Reaktionen
5.400
Punkte
564
Wie jetz?

Das macht DSM / Docker doch automatisch. Jeder Container hat standardmäßig eine IP aus dem 172.X.X.X Bereich. Deshalb sagst du ja beim Container einrichten zum Beispiel in dem Fall "9443:9443". Das heißt, der Port 9443 vom Host geht an den Container. Der Container sieht dabei die IP des Docker-Gateways (172.X.X.1). Oder du richtest den Container im Host Netzwerk ein. Dann hat er den gleichen Adressbereich
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Wenn ein Container an einem MACVLAN Netzwerk hängt, dann wird der Container-Port direkt auf dem MACVLAN-Interface gebunden.
Es gibt dort kein Port-Publishing, genauso wie es bei `network_mode: host` auch der Fall ist.
 
Zuletzt bearbeitet:

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
15.029
Punkte für Reaktionen
5.400
Punkte
564
Hab ich mir vorhin auch gedacht. War mir aber nicht sicher
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Mein Problem ist das ich über Nginx Proxy deshalb auch kein redirect hinbekommen.
Ein macvlan Parent-Interface (=das auf dem Host) kann nicht direkt mit seinen Child-Interfaces (=die von den Containern) kommunizieren. Das ist eine Sicherheitseinschänkung des Linux-Kernels. Der Workaround ist dem Host ein zusätzliches MACVLAN-Interface zu verpassen (siehe: https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/ , Sektion "Hostaccess")

Update: seit wann benötig Portainer privileged: true? Gerade wenn ein Container aus dem Internet erreichbar sein sollte, dann sollte man diesen Modus meiden, da er die Isolation des Docker Containers nahezu vollständig auflöst... Wenn Linux-capabilites benötigt werden, dann sollte diese mit cap_add explizit hinzugefügt werden - statt einfach "du darfst alles" zu konfigurieren.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: plang.pl

sharbich

Benutzer
Mitglied seit
08. Jan 2023
Beiträge
11
Punkte für Reaktionen
0
Punkte
1
Okay, dann eine Frage. Wie bekomme ich ein Zugriff aus anderen Netzen auf die container wenn ich nur den Port auf dem Server habe? Wahrscheinlich weil als Netz 0.0.0.0 angegeben wird. Heißt, der Port lauscht auf allen Interfaces! Ist das nicht generell ein Sicherheitsrisiko? Nein, das kann wohl nicht die Philosophie von "Docker" sein, oder?
 

EDvonSchleck

Gesperrt
Mitglied seit
06. Mrz 2018
Beiträge
4.703
Punkte für Reaktionen
1.119
Punkte
214
Warum verwendest du nicht Docker in der Bridge oder als Host? Wüsste nicht, wo da ein Problem ist. Betreibe selbst etliche Container. Das Problem ist eher das MacVlan, wie immer.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
@sharbich: ich verstehe deinen letzten Post nicht. Vermutlich braucht es noch Kontext-Information die in deinem Kopf existiert, aber nicht ihren Weg in den Post gefunden hat. Magst Du hier nochmal nachkonkretisieren?
 

sharbich

Benutzer
Mitglied seit
08. Jan 2023
Beiträge
11
Punkte für Reaktionen
0
Punkte
1
Warum verwendest du nicht Docker in der Bridge oder als Host?
Dann brauche ich wohl mehr Informationen wie ich das hinbekommen? Ich habe einen Client mit der IP-Adresse 192.168.30.67, dieser möchte gerne auf die container Adresse 172.17.10.2 zugreifen?
Aber wie? Kein Routing zum 172er Subnet. Nur eine IP des Server (192.168.20.20) wo Docker drauf läuft. Es gibt ein Netzwerkinterface auf dem Server mit dem Namen docker0, da hängt das 172er Netz.
Genau hier brauche ich Unterstützung? oder soll ich ein Interface auf dem Sevrer mit br1 zusammen mit docker0 in einer Bridge konfigurieren?

Viele, viele Fragen?
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
15.029
Punkte für Reaktionen
5.400
Punkte
564
Doch. Das Routing macht ja Docker/die DS selbst. Du greifst auf dem Port zu (am NAS), den du bei der Container Einrichtung dem Container gegeben hast. Das NAS leitet den Zugriff weiter ins 172er Netz
Sprich:
Angenommen, dein NAS hat die 10.1.1.1
Der Container (nehmen wir an, es ist der Portainer, installiert mit "9443:9443"); hat die 172.20.0.3
Um auf den Portainer zuzugreifen gibst du im Browser ein: 10.1.1.1:9443
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Aber wie? Kein Routing zum 172er Subnet. Nur eine IP des Server (192.168.20.20) wo Docker drauf läuft.
Das ist auch richtig so. Wer einen Container im Bridge-Netzwerk direkt per ip ansprechen will, versucht mit hoher Wahrscheinlichkeit etwas zu tun, was mit Docker so nicht vorgesehen ist bzw. anders gelöst werden sollte..

Am Container muss der Container-Port auf einen Host-Port gemapped werden. Danach kann man den Container über dsm-ip:gemappter-host-port erreichen. Zusätzlich kann man im Syno Reverse Proxy eine Regel anlegen, die als Target an ip:gemappter-host-port durchreicht.
 


 

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