Изменение разрешений добавляемого файла на том Docker

В руководстве по передовым методам работы с 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 выше собственным файлом конфигурации ?


person hermansc    schedule 05.01.2015    source источник


Ответы (1)


Поскольку вы добавляете свой собственный файл my_custom_config.cfg непосредственно в контейнер во время сборки, просто измените разрешения файла my_custom_config.cfg на своем хост-компьютере, а затем создайте свой образ с помощью сборки docker. Разрешения хост-компьютера копируются в образ контейнера.

person Usman Ismail    schedule 05.01.2015
comment
Нет, ADD работает не так - по крайней мере, по моему опыту. Биты прав доступа переносятся (т. Е. 777), но пользователь-владелец и группа всегда меняются на root. Это можно проверить с помощью следующего простого файла Docker: FROM cpuguy83/ubuntu RUN useradd nagios ADD foo.txt / CMD ["sh"] Где foo.txt принадлежит nagios в хост-системе. Конечный результат: # ls -la / |grep foo -rwxrwxrwx 1 root root 0 Jan 5 18:15 foo.txt - person hermansc; 05.01.2015
comment
Думаю, я мог бы просто дать своим конфигурационным файлам права доступа 664. - person hermansc; 05.01.2015
comment
Да вот что я имею в виду, дать прочитать все в файл. Я не могу проверить это прямо сейчас, поскольку dockerhub, похоже, не работает, но я также подозреваю, что образ nagios настраивает пользователя на nagios, что означает, что в вашем образе вам, возможно, придется сделать: USER root RUN chown USER nagios, чтобы сменить владельцев. См. github.com/docker/docker/issues/6119. - person Usman Ismail; 05.01.2015
comment
Хорошо, по крайней мере, пока это будет работать. Доказано, что запуск службы от имени root не делает Apache счастливым :) ответьте как ее решение. Спасибо, цените это. - person hermansc; 05.01.2015
comment
Если вы не хотите изменять права / владельца исходных файлов, вы можете расширить этот обходной путь, добавив файлы в какое-то необъемное место внутри контейнера, chown / chmod и переместившись в целевое место назначения. - person Mykola Gurov; 05.01.2015