ENTRYPOINT im Dockerfile verwenden
Wir lernen nun, wie man die ENTRYPOINT-Anweisung nutzt, um die Konfiguration beim Start des Containers noch flexibler zu gestalten (wir nutzen beispielhaft Port 9100).
-
Öffnen Sie das Dockerfile erneut.
-
Ändern Sie den Inhalt auf:
FROM nginx
COPY index.html /usr/share/nginx/html/
COPY start.sh /start.sh
RUN chmod +x /start.sh
ENTRYPOINT ["/start.sh"]
Wir haben die festen sed-Befehle entfernt. Stattdessen nutzen wir ein Skript beim Start (ENTRYPOINT), was das Image wesentlich flexibler macht.
- Erstellen Sie eine neue Datei namens
start.sh im selben Verzeichnis mit folgendem Inhalt:
#!/bin/bash
## Standard-Port setzen, falls NGINX_PORT nicht definiert ist
export NGINX_PORT=${NGINX_PORT:-9100}
## Port in der Nginx-Konfiguration ersetzen
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;'
Dieses Skript setzt einen Standardwert, passt die Konfiguration beim Container-Start an, gibt eine Statusmeldung aus und startet Nginx im Vordergrund.
-
Speichern Sie beide Dateien.
-
Bauen Sie das Image neu:
docker build -t my-nginx-entrypoint .
- Starten Sie den Container und setzen Sie den Port 9100 explizit über eine Umgebungsvariable:
docker run -d -p 9100:9100 -e NGINX_PORT=9100 --name entrypoint-container my-nginx-entrypoint
- Prüfen Sie die Logs, um die Startmeldung zu sehen:
docker logs entrypoint-container
Sie sollten "Starting Nginx on port 9100" in der Ausgabe sehen.
- Überprüfen Sie den Zugriff:
curl http://localhost:9100