No se puede establecer comunicación entre dos contenedores rootfull con podman

No se puede establecer comunicación entre dos contenedores rootfull con podman

Tengo dos contenedores nginx en ejecución.

Uno escucha en el puerto 80 y el otro en el 8080.

Así es como los ejecuto:

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

El segundo:

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

Configuración de NGiNX:

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

También probé:

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

Esta configuración es utilizada por el --name=nginxcontenedor.

Aquí está el error que recibo:

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" "-"

¿Hay alguna forma de hacer que estos contenedores se comuniquen entre sí?

También intenté usar --pod. Pero luego apareció este error:

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

Respuesta1

No debe usar --publish-all, ya que la página de manual de podman-run indica que esto publica todos los puertos expuestos en puertos aleatorios de la interfaz del host. Por tanto, la -popción es suficiente.

Crear una red dedicada donde estarían ambos contenedores podría ayudar con su problema; luego podría hacer referencia a ella usando la --network=network-idopción del runcomando.

Cuando se utilizan pods, las asignaciones de puertos deben definirse en el propio pod, no en los contenedores dentro de ese pod:

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

No sería posible ejecutar en un solo pod con dos instancias de nginx debido a puertos 80 en conflicto (utiliza los puertos expuestos de la imagen).

Red Hat publicó una buena explicación:https://www.redhat.com/sysadmin/container-networking-podman

información relacionada