Usar ENTRYPOINT en el Dockerfile
En este paso, aprenderemos a usar la instrucción ENTRYPOINT y a configurar un puerto diferente (9100) mediante un script de inicio.
-
En WebIDE, abra el Dockerfile una vez más.
-
Modifique el contenido del Dockerfile por el siguiente:
FROM nginx
COPY index.html /usr/share/nginx/html/
COPY start.sh /start.sh
RUN chmod +x /start.sh
ENTRYPOINT ["/start.sh"]
Este Dockerfile elimina la variable de entorno fija y el comando sed directo. En su lugar, gestionaremos la configuración en tiempo de ejecución mediante un script ENTRYPOINT. Esto hace que nuestra imagen sea mucho más flexible.
- Cree un nuevo archivo llamado
start.sh en el mismo directorio con el siguiente contenido:
#!/bin/bash
## Set a default port if NGINX_PORT is not set
export NGINX_PORT=${NGINX_PORT:-9100}
## Replace the port in the nginx configuration
sed -i "s/listen[[:space:]]*80;/listen $NGINX_PORT;/g" /etc/nginx/conf.d/default.conf
echo "Starting Nginx on port $NGINX_PORT"
nginx -g 'daemon off;'
Este script establece un puerto por defecto, modifica la configuración de Nginx al arrancar el contenedor, imprime un mensaje informativo y finalmente inicia Nginx.
-
Guarde ambos archivos en WebIDE.
-
En la terminal, construya la imagen con una nueva etiqueta:
docker build -t my-nginx-entrypoint .
- Ejecute un contenedor basado en la nueva imagen. Estableceremos el puerto a 9100 usando una variable de entorno en el comando de ejecución.
docker run -d -p 9100:9100 -e NGINX_PORT=9100 --name entrypoint-container my-nginx-entrypoint
- Revise los registros (logs) del contenedor para ver el mensaje de inicio:
docker logs entrypoint-container
Debería ver el mensaje "Starting Nginx on port 9100" en la salida.
- Verifique que el servidor web responda correctamente en el nuevo puerto:
curl http://localhost:9100
Debería ver el contenido HTML de index.html.