Kommunikation zwischen zwei Rootfull-Containern mit Podman nicht möglich

Kommunikation zwischen zwei Rootfull-Containern mit Podman nicht möglich

Ich habe zwei Nginx-Container laufen.

Einer lauscht auf Port 80, der andere auf 8080.

So führe ich sie aus:

sudo podman run --rm \
 -t \
 -p 8080:80 \
 --publish-all \
 --name nginx-two \
 -v ./html2/:/usr/share/nginx/html \
 -v ./html2/conf/default.conf:/etc/nginx/conf.d/default.conf \
 -d nginx

Der Zweite:

sudo podman run --rm -t -p 80:80 --name nginx -v ./html/:/usr/share/nginx/html -v ./html/conf/conf.d:/etc/nginx/conf.d -d nginx

NGiNX-Konfiguration:

location / {
    proxy_pass http://10.88.0.37:8080;
}

Ich habe auch versucht:

location / {
    proxy_pass http://127.0.0.1:8080;
}

Diese Konfiguration wird vom --name=nginxContainer verwendet.

Hier ist der Fehler, den ich bekomme:

2020/01/26 15:33:05 [error] 8#8: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 10.88.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "localhost"
10.88.0.1 - - [26/Jan/2020:15:33:05 +0000] "GET / HTTP/1.1" 502 157 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0" "-"

Gibt es eine Möglichkeit, diese Container miteinander kommunizieren zu lassen?

Ich habe auch versucht, zu verwenden --pod. Dann kam aber dieser Fehler:

Error: cannot set port bindings on an existing container network namespace

Antwort1

Sie sollten nicht verwenden --publish-all, da die Manpage von podman-run angibt, dass hierdurch alle freigegebenen Ports auf zufällige Ports der Hostschnittstelle veröffentlicht werden. Die -pOption ist daher ausreichend.

Das Erstellen eines dedizierten Netzwerks, in dem sich beide Container befinden, könnte bei Ihrem Problem hilfreich sein. Sie können dann mithilfe der Befehlsoption darauf --network=network-idverweisen run.

Bei der Verwendung von Pods sollten die Portzuordnungen auf dem Pod selbst und nicht auf den Containern innerhalb dieses Pods definiert werden:

podman pod create --name mypod -p 80:80

Aufgrund von Portkonflikten wäre es nicht möglich, zwei Nginx-Instanzen in einem einzigen Pod auszuführen. 80 (es werden die freigegebenen Ports des Images verwendet)

Red Hat hat eine gute Erklärung veröffentlicht:https://www.redhat.com/sysadmin/container-networking-podman

verwandte Informationen