Использование ENTRYPOINT в Dockerfile
Теперь мы узнаем, как использовать инструкцию ENTRYPOINT для более гибкого управления запуском контейнера, и попробуем использовать другой порт (9100).
-
В WebIDE снова откройте Dockerfile.
-
Измените его содержимое следующим образом:
FROM nginx
COPY index.html /usr/share/nginx/html/
COPY start.sh /start.sh
RUN chmod +x /start.sh
ENTRYPOINT ["/start.sh"]
Мы убрали жестко заданную переменную и команду sed из Dockerfile. Вместо этого мы будем настраивать параметры во время запуска с помощью скрипта ENTRYPOINT. Это делает образ более универсальным.
- Создайте в той же директории новый файл
start.sh со следующим содержимым:
#!/bin/bash
## Устанавливаем порт по умолчанию, если NGINX_PORT не задан
export NGINX_PORT=${NGINX_PORT:-9100}
## Заменяем порт в конфигурации nginx
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;'
Этот скрипт проверяет наличие переменной окружения, правит конфиг Nginx «на лету», выводит информационное сообщение и запускает Nginx.
-
Сохраните оба файла.
-
Соберите образ:
docker build -t my-nginx-entrypoint .
- Запустите контейнер, передав переменную окружения через флаг
-e:
docker run -d -p 9100:9100 -e NGINX_PORT=9100 --name entrypoint-container my-nginx-entrypoint
- Проверьте логи контейнера, чтобы увидеть сообщение о запуске:
docker logs entrypoint-container
Вы должны увидеть строку "Starting Nginx on port 9100".
- Убедитесь, что сервер отвечает по новому порту:
curl http://localhost:9100