nginx no se inicia en la ventana acoplable, a menos que se ejecute manualmente y se inicie

nginx no se inicia en la ventana acoplable, a menos que se ejecute manualmente y se inicie

Soy bastante nuevo en Docker. Tengo que crear un archivo acoplable que iniciará el servidor Node Express y Nginx como proxy inverso. pero el problema es que el servidor de nodo se inicia pero Nginx no se inicia. cuando ejecuto manualmente en el contenedor y lo inicio escribiendo "nginx" y luego presiono enter, inicia y el contenedor escucha el puerto 80 y Nginx funciona de esta manera. pero quiero que comience tan pronto como se inicie el contenedor.

Aquí está mi Dockerfile:

FROM alpine
RUN apk add --update nodejs nodejs-npm
RUN apk add nginx
WORKDIR /usr/
COPY package*.json ./
RUN npm install
COPY . .
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
RUN nginx #<-- this does not work!!
CMD npm run start
EXPOSE 80

Este es un servidor API que escucha en 8080, por lo que Nginx invertirá el proxy y lo proporcionará al puerto 80 al mundo exterior. Puedo lograrlo ejecutando 2 contenedores, uno para Nginx y otro para nodejs usando docker-compose, pero quiero ejecutar ambos en One Container.

Respuesta1

Después de leer su pregunta nuevamente, me pregunto por qué necesita un proxy inverso de todos modos. Debe parchear su aplicación de nodo para que ella misma sirva el puerto 80.

De todos modos, la idea detrás del contenedor Docker es "Un contenedor, un proceso". Este paradigma se ignora mucho, pero no se debe servir un proxy inverso en un contenedor, que a su vez puede servir como servidor web.

Respuesta2

Necesitamos separar los procesos del nodo JS y nginx en contenedores separados. Ambos pueden residir en la misma red y comunicarse entre sí, los contenedores se comunican entre sí por su nombre. Puede recibir el paquete en el proxy inverso nginx y luego reenviarlo a la aplicación nodeJS. En la aplicación nodeJS, su npm comienza con el proceso principal y en la aplicación nginx, su demonio de servicio de nginx debe ser el proceso principal. El contenedor siempre está activo hasta el momento en que el proceso principal está en funcionamiento, por lo que en el contenedor mundial separamos cada una de las funcionalidades individuales y las implementamos como contenedores. En su caso, la aplicación nodeJS debe ser un contenedor separado y nginx debe ser un contenedor separado. Solo para el contenedor nginx estaría exponiendo el puerto para conectividad externa.

información relacionada