
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=nginx
contenedor.
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 -p
opció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-id
opción del run
comando.
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