Tengo mi aplicación docker ejecutándose en la instancia aws EC2, y actualmente estoy tratando de asignar la aplicación a la dirección IP externa usando Nginx. Aquí hay una instantánea de los contenedores que tengo en ejecución:
Mi aplicación de prueba es una aplicación bastante simple que muestra un sitio web html estático. Y lo implementé usando el siguiente comando:
docker run -d --name=test-app test-app
El proxy nginx tiene el siguiente proxy.conf
server { listen 80; location / { proxy_pass http://test-app; } }Aquí está el Dockerfile para el proxy nginx:
FROM nginx:alpine RUN rm /etc/nginx/conf.d/* COPY proxy.conf /etc/nginx/conf.d/ nginx-proxy se ejecuta con el siguiente comando: docker run -d -p 80:80 --name=nginx-proxy nginx-proxy
Sin embargo, el contenedor nginx nunca se ejecuta, y aquí aparece el registro de errores
2020/03/27 15:55:19 [emerg] 1#1: host not found in upstream "test-app" in /etc/nginx/conf.d/proxy.conf:5 nginx: [emerg] host not found in upstream "test-app" in /etc/nginx/conf.d/proxy.conf:5Mientras sus dos contenedores se están ejecutando y ha expuesto correctamente los puertos necesarios para el contenedor NGINX. No ha expuesto ningún puerto para el contenedor test-app . El contenedor NGINX no tiene forma de comunicarse con él. Exponer los puertos directamente con la docker run probablemente anularía el punto de usar un proxy inverso en su situación. Entonces, en cambio, lo que debe hacer en esta situación es crear una red para ambos contenedores Docker y luego agregarlos. Entonces podrán comunicarse entre sí a través de un puente. Por ejemplo:
docker network create example docker run -d --network=example --name=test-app test-app docker run -d -p 80:80 --network=example --name=nginx-proxy nginx-proxy Ahora que tiene ambos pods en la misma red, Docker habilitará el descubrimiento de servicios basados en DNS entre ellos por nombre de contenedor y podrá resolverlos entre sí. Puede probar la conectividad así: docker exec -it nginx-proxy ping test-app . Bueno, eso siempre que ping esté instalado en ese contenedor Docker.