Образ Docker Centos 7 с Apache2 DocumentRoot не читается

У меня есть док-контейнер с изображением Centos 7. Все, что нужно сделать, это запустить простой сервер Apache2. Когда контейнер запускается, он сразу же выходит с:

AH00526: Syntax error on line 119 of /etc/httpd/conf/httpd.conf:
DocumentRoot '/var/www/html' is not a directory, or is not readable

Я сделал несколько основных проверок:

  • Папка существует
  • Права доступа ```rwx r_x r_x root root```` для каждой папки /var/www/html
  • Пробовал chown -R apache /var/www (ни одна соломинка не останется незажатой!)
  • SELinux отключен (... или нет?)

Когда я вхожу в контейнер с точкой входа bash, я могу запустить apache от имени пользователя root с помощью /sbin/httpd -D FOREGROUND, и все работает, как и ожидалось.

Поэтому я думаю, что это почти наверняка связано с разрешениями. Погуглив нашел много страниц с моей ошибкой, например. Перезапуск Apache вызывает DocumentRoot должен быть каталогом, даже если это каталог и, кажется, нет проблем с привилегиями Эта конкретная страница подробно описывает то, что я получаю, и решение почти на каждой странице — настроить SELinux. Однако SELinux отключен. Даже в этой ссылке есть комментарий от ОП

Моя версия Linux не является Linux с усиленной безопасностью, поэтому, не понимая, я все равно попробовал: никакого эффекта.

Тем не менее они приняли решение, заключающееся в настройке SELinux.

Я думаю, что что-то упускаю, почти наверняка связанное с SELinux, но я не могу понять. Образ докера имеет следующие (явное отсутствие) настройки SELinux:

  • /etc/selinux содержит только semanage.conf и tmp/ (пусто)
  • /usr/sbin не содержит исполняемых файлов se*
  • rpm -qa | grep selinux
    • libselinux-2.5-12.el7.x86_64
  • /etc/sysconfig/selinux does not exist
    • So in the Dockerfile I tried RUN echo "SELINUX=disabled" > /etc/sysconfig/selinux
  • doing yum install -y policycoreutils installs sestatus in /usr/sbin. Running sestatus gives
    • SELinux status: disabled
    • С /etc/sysconfig/selinux или без него

Действительно похоже, что SELinux отключен, но ошибка выглядит так, как будто он включен.


person Martin    schedule 31.08.2018    source источник
comment
Какой образ Docker вы используете? Если это пользовательский образ, можете ли вы поделиться своим Dockerfile? Можете ли вы также включить команду docker run, которую вы используете для запуска образа?   -  person David Maze    schedule 31.08.2018
comment
Благодарю вас! Вы подтолкнули меня в правильном направлении. Я использую docker-compose для запуска ряда связанных сервисов. Я перемещаю эти сервисы из нашей базы Ubuntu в базу Centos клиента, но я не обновлял сопоставления томов в docker-compose.yml. Изменение их с путей deb на centos решило проблему.   -  person Martin    schedule 31.08.2018


Ответы (1)


В данном случае проблема была связана со способом запуска контейнера.

Я использую docker-compose для запуска этого конкретного контейнера, но пути для сопоставления томов были неверными.

Я до сих пор не уверен, почему это приводит к тому, что apache не запускается так, как он это делает, но исправление путей устранило проблему.

person Martin    schedule 03.09.2018