运行Apache2的Docker Centos 7映像“DocumentRoot ...不可读”

问题描述 投票:0回答:1

我有一个运行Centos 7图像的docker容器。它需要做的只是运行一个简单的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

我做了一些基本的检查:

  • 文件夹存在
  • 权限是每个文件夹/ var / www / html的````rwx r_x r_x root root````
  • 尝试chown -R apache /var/www(没有秸秆保持不被抓住!)
  • SELinux被禁用(......或者是吗?)

当我使用bash入口点进入容器时,我可以使用/sbin/httpd -D FOREGROUND以root身份启动apache,一切都按预期工作。

所以我认为它几乎肯定是权限的东西。谷歌搜索发现很多页面有我的错误,例如Apache restart causes DocumentRoot must be a directory, even though it is a directory and there seem to be no privilege issues这个特殊的页面描述了我所得到的内容,几乎每个页面中的解决方案都是配置SELinux。但是SELinux被禁用了。即使在该链接中,OP也有评论

我的linux版本不是安全增强型Linux,所以不理解我还是尝试了它:没有效果。

然而他们接受了配置SELinux的解决方案。

我想我错过了一些东西,几乎可以肯定SELinux相关,但我无法弄清楚。 docker镜像具有以下(明显缺少)SELinux设置:

  • / etc / selinux只包含semanage.conf和tmp /(empty)
  • / usr / sbin不包含se *可执行文件
  • rpm -qa | grep selinux libselinux-2.5-12.el7.x86_64
  • / etc / sysconfig / selinux不存在 所以在Dockerfile中我尝试了RUN echo "SELINUX=disabled" > /etc/sysconfig/selinux
  • yum install -y policycoreutils在/ usr / sbin中安装sestatus。运行sestatus给出 SELinux status: disabled 有或没有/ etc / sysconfig / selinux

它看起来真的像SELinux被禁用,但错误看起来非常像它已启用。

apache docker centos selinux
1个回答
0
投票

在这种情况下的问题是由于容器的启动方式。

我使用docker-compose来启动此特定容器,但卷映射的路径不正确。

我仍然不确定为什么这会导致apache无法以它的方式启动,但纠正修复问题的路径。

© www.soinside.com 2019 - 2024. All rights reserved.