【问题标题】:Docker Centos 7 image running Apache2 "DocumentRoot ... is not readable"运行 Apache2 的 Docker Centos 7 映像“DocumentRoot ... 不可读”
【发布时间】:2019-02-06 16:30:35
【问题描述】:

我有一个运行 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 版本不是 Security Enhanced Linux,所以在不理解的情况下我还是尝试了它:没有效果。

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

我想我遗漏了一些东西,几乎可以肯定与 SELinux 相关,但我想不通。 docker 映像具有以下(明显缺乏)SELinux 设置:

  • /etc/selinux 仅包含 semanage.conf 和 tmp/(空)
  • /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 确实被禁用了,但错误看起来很像它已启用。

【问题讨论】:

  • 你运行的是什么 Docker 镜像?如果是自定义镜像,你能分享你的 Dockerfile 吗?是否还可以包含用于启动映像的 docker run 命令?
  • 谢谢!你把我推向了正确的方向。我使用 docker-compose 来启动一些相关的服务。我正在将这些服务从我们的 ubuntu 基地转移到客户的 centos 基地,但我没有更新 docker-compose.yml 中的卷映射。将它们从 deb 路径更改为 centos 路径已经解决了这个问题。

标签: apache docker centos selinux


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-12-12
    • 2019-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    相关资源
    最近更新 更多