В руководстве по передовым методам работы с Docker говорится:
Вам настоятельно рекомендуется использовать VOLUME для любых изменяемых и / или обслуживаемых пользователем частей вашего изображения.
И посмотрев исходный код, например, в образе cpuguy83 / nagios это ясно видно, как все, от nagios до конфигурационных каталогов apache, доступно в виде томов.
Однако, глядя на то же изображение, служба apache (и cgi-скрипты для nagios) по умолчанию запускаются от имени пользователя nagios
. Итак, теперь я нахожусь в тупике, так как я не могу понять, как добавить свои собственные файлы конфигурации, например, определить больше хостов для мониторинга nagios. Я пробовал:
FROM cpuguy83/nagios
ADD my_custom_config.cfg /opt/nagios/etc/conf.d/
RUN chown nagios: /opt/nagios/etc/conf.d/my_custom_config.cfg
CMD ["/opt/local/bin/start_nagios"]
Я собираю как обычно и пытаюсь запустить его с docker run -d -p 8000:80 <image_hash>
, однако получаю следующую ошибку:
Ошибка: не удается открыть файл конфигурации '/opt/nagios/etc/conf.d/my_custom_config.cfg' для чтения: отказано в разрешении
И, конечно же, разрешения в папке выглядят так (в то время как процесс apache выполняется как nagios
):
# ls -l /opt/nagios/etc/conf.d/
-rw-rw---- 1 root root 861 Jan 5 13:43 my_custom_config.cfg
Теперь, на это уже был дан ответ (почему не работает chown в Dockerfile), но не было предложено никакого подходящего решения, кроме «изменить исходный файл Dockerfile».
Честно говоря, я думаю, что здесь есть некоторая основная концепция, которую я не понял (поскольку я не вижу смысла объявлять каталоги конфигурации как VOLUME и запускать службы как что-либо, кроме root), поэтому предоставил Dockerfile, как указано выше (который следует Рекомендации Docker по добавлению нескольких томов) - это решение / проблема:
- Чтобы изменить NAGIOS_USER / APACHE_RUN_USER на 'root' и запустить все как root?
- Чтобы удалить объявления VOLUME в Dockerfile для nagios?
- Другие подходы?
Как бы вы расширили nagios dockerfile выше собственным файлом конфигурации ?